【问题标题】:java.sql.SQLException: ORA-22275: invalid LOB locator specifiedjava.sql.SQLException: ORA-22275: 指定的 LOB 定位器无效
【发布时间】:2020-08-11 08:46:05
【问题描述】:

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

我在 Oracle 中使用 db。我有包含 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;
    }
}

感谢您的帮助!

【问题讨论】:

    标签: java oracle null sql-update clob


    【解决方案1】:

    你可以explicitly set it to null:

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

    【讨论】:

    • 我还没有见到pStmt.setNull(2, java.sql.Types.CLOB);。很好的解决方案。谢谢你!
    【解决方案2】:

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

    UPDATE MY_TABLE  SET XMLDATA = EMPTY_CLOB();
    

    我想你可能会在 XMLDATA 为空时添加一个新的 String sql

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

    【讨论】:

    • 谢谢,但这不是我想要的。 EMPTY_CLOB() 设置空值,但我需要空值。
    猜你喜欢
    • 2016-02-17
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多