私はhere
demo.zipファイルを発見したOracle Databaseのhere
については、OracleのベンダーJDBCドライバ(ojdbc6.jarは)を見上げ、私はそれを解凍し、CLOBおよびBLOBのソースをgrepped。
ファイルTemporaryLobJDBC40.java
そこには、一時的なclobとblobが作成され、次にいくつかのデータで満たされ、準備されたステートメント(パラメータ化されたINSERT)を介してテーブルに挿入されるサンプルがあります。
次に、文が実行され、閉じられ、一時clobおよびblobが解放され、トランザクションがコミットされます。
次に、テーブルの行をループして永続的なblob/clobを作成し、getClob()、getBlob()から返されたオブジェクトを割り当てて、ストリームに内容をダンプします。
パーマネントのブロブは決して解放されません。オブジェクトをスコープから外すと、各繰り返しの後にガベージコレクタがこれらのオブジェクトを自動的に解放すると仮定します。
最後の2つのBlob/Clobオブジェクトは明示的に解放されませんが、最後の反復でスコープが終了したガベージコレクタによって暗黙的にクリーンアップされます。 (after the}}
個人的には、私は明示的にクリーンアップを行いますが、自分自身でクリーンアップを行います。このデモでは、
のいずれかの操作を行うことができます。
ここでは、コード(TemporaryLobJDBC40.java)です:
/*
* This sample shows how to create
* a temporary BLOB and CLOB, write
* some data to them and then insert
* them into a table. This makes a
* permanent copy in the table. The
* temp lobs are still available for
* further use if desired until the
* transaction is committed.
* When fetched from the table, the
* lobs are no longer temporary.
*
* This version uses the new
* JDBC 4.0 factory methods in
* java.sql.Connection and the
* free methods in java.sql.Blob and Clob
*
* Testing for temporary status still
* requires Oracle specfiic APIs in
* oracle.sql.BLOB and oracle.sql.CLOB.
*
* It needs jdk6 or later version and ojdbc6.jar
*/
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Blob;
import java.sql.Clob;
class TemporaryLobJDBC40
{
public static void main (String args [])
throws Exception
{
Connection conn = DemoConnectionFactory.getHRConnection(args);
LobExample.createSchemaObjects(conn);
Blob tempBlob = conn.createBlob();
Clob tempClob = conn.createClob();
System.out.println ("tempBlob.isTemporary()="+
((oracle.sql.BLOB)tempBlob).isTemporary());
System.out.println ("tempClob.isTemporary()="+
((oracle.sql.CLOB)tempClob).isTemporary());
LobExample.fill(tempBlob, 100L);
LobExample.fill(tempClob, 100L);
String insertSql = "insert into jdbc_demo_lob_table values (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(insertSql);
pstmt.setString(1, "one");
pstmt.setBlob(2, tempBlob);
pstmt.setClob(3, tempClob);
pstmt.execute();
pstmt.close();
tempBlob.free();
tempClob.free();
conn.commit();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select b, c from jdbc_demo_lob_table");
while(rs.next())
{
Blob permanentBlob = rs.getBlob(1);
Clob permanentClob = rs.getClob(2);
System.out.println ("permanentBlob.isTemporary()="+
((oracle.sql.BLOB)permanentBlob).isTemporary());
System.out.println ("permanentClob.isTemporary()="+
((oracle.sql.CLOB)permanentClob).isTemporary());
LobExample.dump(permanentBlob);
LobExample.dump(permanentClob);
}
rs.close();
stmt.close();
conn.close();
}
}
OracleベンダーのJDBCドライバを使用していますか?はいの場合はどちらですか? http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html# –
@DragosToader:ojdbc6。私は正確なバージョンを再確認する必要があります... –