java.sql.SQLException: ORA-22275: 指定的 LOB 定位器无效
java.sql.SQLException: ORA-22275: invalid LOB locator specified
如何更新数据库中的记录?
我在 Oracle 中使用数据库。我有包含列 RQUID(VARCHAR)、STATUS(VARCHAR) 和 XMLDATA(CLOB) 的 table。我想通过 RQUID 更新此 table 中的记录。当我更新 STATUS 和 XMLDATA 时,一切都很好。当 xmlData=null 时,我想在 table 中将 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;
}
}
感谢您的帮助!
if (xmlData == null || xmlData.length() == 0) {
pStmt.setNull(2, java.sql.Types.CLOB);
}
else {
pstmt.setString(2, xmlData);
}
当字段 XMLDATA 为空时,您应该像这样更新 table
UPDATE MY_TABLE SET XMLDATA = EMPTY_CLOB();
我认为当 XMLDATA 为 null
时,您可以添加一个新的字符串 sql
String sql = "UPDATE MY_TABLE SET STATUS=?, XMLDATA=empty_clob() WHERE RQUID=?";
如何更新数据库中的记录?
我在 Oracle 中使用数据库。我有包含列 RQUID(VARCHAR)、STATUS(VARCHAR) 和 XMLDATA(CLOB) 的 table。我想通过 RQUID 更新此 table 中的记录。当我更新 STATUS 和 XMLDATA 时,一切都很好。当 xmlData=null 时,我想在 table 中将 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;
}
}
感谢您的帮助!
if (xmlData == null || xmlData.length() == 0) {
pStmt.setNull(2, java.sql.Types.CLOB);
}
else {
pstmt.setString(2, xmlData);
}
当字段 XMLDATA 为空时,您应该像这样更新 table
UPDATE MY_TABLE SET XMLDATA = EMPTY_CLOB();
我认为当 XMLDATA 为 null
时,您可以添加一个新的字符串 sqlString sql = "UPDATE MY_TABLE SET STATUS=?, XMLDATA=empty_clob() WHERE RQUID=?";