java.sql.SQLException:ORA-22275:指定的LOB定位器无效

问题描述

如何更新数据库中的记录?

我在 Oracle 中使用数据库。我有带有列RQUID(VARCHAR),STATUS(VARCHAR)和XMLDATA( CLOB )的表。我想通过RQUID更新此表中的记录。当我更新STATUS和XMLDATA时,一切都很好。当xmlData = null 时,我想在表中将null设置为XMLDATA,但是在行int rows = pstmt.executeUpdate();中,我收到下一条消息:

[WARN] 2020-08-11 10:46:54,038 [pool-2-thread-1] com.example.dao.AbstractDAO closeCLob - java.sql.SQLException: ORA-22275: invalid LOB locator specified

,我的程序死机了。记录也不会更新。对于这两种情况,当xmlData =“ someData”和xmlData = null时,如何强制我的程序更新记录,您有什么建议吗?

我的代码:

public boolean updateRecord(String rqUid,Integer code,String xmlData) throws MyException {
    if (rqUid != null) {
        String sql = "UPDATE MY_TABLE SET STATUS=?,XMLDATA=? WHERE RQUID=?";
        try (Connection con = pool.getConnection();
             PreparedStatement pstmt = con.prepareCall(sql)) {
            pstmt.setString(1,(code != null) ? code.toString() : null);
            pstmt.setString(2,xmlData);
            pstmt.setString(3,rqUid);
            int rows = pstmt.executeUpdate();
            return rows > 0;
        } catch (Exception e) {
            String errorMessage = "Ошибка обновления записи";
            LOGGER.info(errorMessage,e);
            throw new MyException(errorMessage + ".",e);
        }
    } else {
        return false;
    }
}

感谢您的帮助!

解决方法

您可以explicitly set it to null

if (xmlData == null || xmlData.length() == 0) {
    pStmt.setNull(2,java.sql.Types.CLOB);
}
else {
    pstmt.setString(2,xmlData);
}
,

当XMLDATA字段为空时,您应该像这样更新表

UPDATE MY_TABLE  SET XMLDATA = EMPTY_CLOB();

我认为当XMLDATA为空时,您可能会添加一个新的String sql

String sql = "UPDATE MY_TABLE SET STATUS=?,XMLDATA=empty_clob() WHERE RQUID=?";

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...