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;
    }
}

Спасибо за любую помощь!


person Oleg Sandro    schedule 11.08.2020    source источник


Ответы (2)


Вы можете явно установить его обнулить:

if (xmlData == null || xmlData.length() == 0) {
    pStmt.setNull(2, java.sql.Types.CLOB);
}
else {
    pstmt.setString(2, xmlData);
}
person Alex Poole    schedule 11.08.2020
comment
Я еще не встречался pStmt.setNull(2, java.sql.Types.CLOB);. Хорошее решение. Thaaank вы! - person Oleg Sandro; 11.08.2020

Когда поле XMLDATA имеет значение null, вы должны обновить таблицу следующим образом

UPDATE MY_TABLE  SET XMLDATA = EMPTY_CLOB();

Я думаю, вы могли бы добавить новый String sql, когда XMLDATA имеет значение null

String sql = "UPDATE MY_TABLE SET STATUS=?, XMLDATA=empty_clob() WHERE RQUID=?";
person Roberto Hernandez    schedule 11.08.2020
comment
Спасибо, но это не то, что я хочу. EMPTY_CLOB() устанавливает пустое значение, но мне нужно нулевое значение. - person Oleg Sandro; 11.08.2020