繁体   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