Используйте Oracle createTeorary для обновления Clob - PullRequest
0 голосов
/ 11 декабря 2011

Я использовал следующие коды для обновления Oracle Clob:

CLOB tempClob = null;
try {
  Connection conn = getConnection();
  PreparedStatement = = conn.prepareStatement("UPDATE PROGRAM_HISTORY SET DETAILS = ? WHERE ID = 12");
  tempClob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION);
  tempClob.open(CLOB.MODE_READWRITE);
  Writer tempClobWriter = tempClob.getCharacterOutputStream();
  tempClobWriter.write(clobData);
  tempClobWriter.flush();
  tempClobWriter.close();
  tempClob.close();

 pStmt.setClob(1, tempClob);
 pStmt.execute();

} catch (Exception ex) { // Trap errors
  System.out.println(" Error Inserting Clob : "+ex.toString());
  ex.printStackTrace();
}finally{
  if(tempClob != null ) tempClob.freeTemporary();
  opstmt.close();
  conn.close();

}

Как видите, после создания временного clob я использовал tempClob.open (CLOB.MODE_READWRITE); открыть и использовать tempClob.close () для последующего удаления; так что мой вопрос в том, что это необходимо? если да, то почему? потому что некоторые примеры кодов, которые я искал в Google, не имеют этой процедуры.

Мой второй вопрос заключается в том, требуется ли это для tempClob.close () в операторе finally; мы должны закрыть временную блокировку, как соединение после использования? или не нужно делать это будет автоматически выпущено?

1 Ответ

1 голос
/ 12 декабря 2011

Объект сеанса Oracle будет сохранять ссылку на CLOB, поэтому сборщик мусора не будет к нему прикасаться. Он будет освобожден автоматически, когда сессия закрыта.

Обратите внимание, что фактическая временная память CLOB не будет существовать где-то в виртуальной машине Java, но будет либо в процессе сервера Oracle (PGA), либо во временном табличном пространстве (диске), в зависимости от конфигурации базы данных и текущей рабочей нагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...