Как использовать setCharacterStream для обновления Clob в Oracle? - PullRequest
0 голосов
/ 22 ноября 2011

Когда я использовал следующие фрагменты для обновления Oracle Clob:

     String toBeUpdated = ""
     StringReader reader = new StringReader(toBeUpdated);
     pStmt.setCharacterStream(parameterIndex,reader , toBeUpdated.length());

Когда длина строки "toBeUpdated" немного больше (обычно более 5000) и значение было готово сохранено в БД, оно было без каких-либо исключений, и ожидаемое значение было возвращено в метод executeUpdate (), когда я побежал вышеуказанные коды. но странная проблема заключается в том, что я проверил DB и обнаружил, что столбец был нулевым (его следует обновить с новым значением).

это происходило не каждый раз, но немного случайно. Я попытался использовать pStmt.setString () вместо pStmt.setCharacterStream все будет хорошо. насколько я знаю, setString ограничен максимальным размером строки (63000), это не может быть предложено решение.

Кто-нибудь может зажечь меня или испытал это?

1 Ответ

1 голос
/ 26 ноября 2011

Oracle предоставляет классы для хранения CLOB из строк. Я использовал следующий код, и он отлично работает:

    long id = ...
    String content = ... // CLOB content
    try {
        Class.forName ("oracle.jdbc.OracleDriver");
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@MY_SERVER:1521:MY_DB", "user", "pass");
        String query = "UPDATE MY_TABLE SET MY_CLOB_COLUMN = ? WHERE ID = ? ";
        OraclePreparedStatement opstmt = (OraclePreparedStatement)conn.prepareStatement(query);
        opstmt.setStringForClob(1, content);
        opstmt.setLong(2, id);
        int result = opstmt.executeUpdate();
         System.out.println("Resultado para : " + tabla + " - " + columna + "  - " +  id + ":" + result);
    } catch (SQLException ex) {
        //Log here
    } catch (ClassNotFoundException ex) {
        //Log here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...