2011-12-11 7 views
0

を更新するために、私はOracleのCLOBを更新するには、次のコードを使用:使用オラクルはcreateTemporaryは、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から検索したサンプルコードの一部にこの手順がないためです。

私の2番目の質問は、これがfinallyステートメントのtempClob.close()に必要です。私たちは使い切った後の接続のように一時的なクローブを閉じる必要がありますか?またはこれを行う必要はありませんそれは自動的に解放されますか?

答えて

1

Oracleセッション・オブジェクトはCLOBへの参照を保持するため、ガベージ・コレクタはCLOBにはアクセスしません。セッションが終了すると自動的に解放されます。

実際の一時CLOBメモリーは、データベース構成および現行の作業負荷に応じて、Java VMのどこかに存在するのではなく、Oracleサーバー・プロセス(PGA)または一時表スペース(ディスク)に存在することに注意してください。