簡體   English   中英

使用Oracle createTemporary更新Clob

[英]Use Oracle createTemporary to update Clob

我使用以下代碼來更新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搜索到的一些示例代碼沒有此過程。

我的第二個問題是,finally語句是否需要tempClob.close()? 我們必須像用完連接后一樣關閉臨時Clob嗎? 還是不需要這樣做,它將自動發布?

Oracle會話對象將保留對CLOB的引用,因此垃圾收集器不會碰它。 會話關閉時,它將自動釋放。

請注意,實際的臨時CLOB內存在Java VM中不會存在,而是在Oracle服務器進程(PGA)或臨時表空間(磁盤)中不存在,具體取決於數據庫配置和當前的工作負載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM