IBM Data Server Driver for JDBC and SQLJ での連続ストリーミング
データソースがプログレッシブストリーミング(ダイナミックデータフォーマットとも呼ばれる)をサポートしている場合、 IBM® Data Server Driver for JDBC and SQLJ プログレッシブストリーミングを使用して、LOBまたはXMLカラムのデータを取得することができます。
Db2 for z/OS® バージョン 9.1 以降では、LOBおよびXMLオブジェクトのプログレッシブストリーミングをサポートしています。 Db2 Linux®、UNIX、Windowsシステム バージョン 9.5 以降、 IBM Informix® バージョン 11.50 以降、および Db2 for IBM i V6R1 以降は、LOBのプログレッシブストリーミングをサポートしています。
連続ストリーミングを使用すると、LOB または XML オブジェクトのサイズに基づいて、LOB または XML のデータを戻すのに最も効率のよいモードがデータ・ソースで動的に判別されます。
| 最低 IBM Data Server Driver for JDBC and SQLJ バージョン | データ・サーバーの最小バージョン | オブジェクトのタイプ |
|---|---|---|
| 3.53 | Db2 IBM i 宛て V6R1 | LOB、XML |
| 3.50 | Db2 Linux、UNIX、Windowsシステム上で バージョン 9.5 | LOB |
| 3.50 | IBM Informix バージョン 11.50 | LOB |
| 3.2 | Db2 for z/OS バージョン9 | LOB、XML |
プログレッシブストリーミングの動作は、プロパティを使用して新しい接続で設定します。 IBM Data Server Driver for JDBC and SQLJprogressiveStreaming プロパティを使用します。
Db2 for z/OS バージョン 9.1 以降のデータ ソース、または Db2 on Linux、UNIX、および Windows システムバージョン 9.5 以降のデータ ソースの場合、既存の接続に対してプログレッシブ ストリーミング動作を設定できます。 DB2Connection.setDBProgressiveStreaming(DB2BaseDataSource.YES) 方法。 DB2Connection.setDBProgressiveStreaming(DB2BaseDataSource.YES)を呼び出す場合、接続に関して作成されるすべての ResultSet オブジェクトでは、連続ストリーミングの動作が使われます。
連続ストリーミングを使用可能に設定すると、JDBC ドライバーが streamBufferSize プロパティーで LOB をいつマテリアライズするかをコントロールできます。 LOB または XML オブジェクトが streamBufferSize 値以下であるとき、オブジェクトはマテリアライズされます。
progressiveStreaming や streamBufferSize の設定に関係なく、アプリケーション・プログラムが以下のいずれかのアクションを実行するときにも、LOB オブジェクトはマテリアライズされます。
- LOB 値を引数としてユーザー定義関数を呼び出す
- LOB 値を入力引数または出力引数としてストアード・プロシージャーを呼び出す
- LOB ホスト変数を LOB ロケーター・ホスト変数に割り当てる
…
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM MY_TABLE");
rs.next(); // Retrieve the first row of the ResultSet
Clob clobFromRow1 = rs.getClob(1);
// Put the CLOB from the first column of
// the first row in an application variable
String substr1Clob = clobFromRow1.getSubString(1,50);
// Retrieve the first 50 bytes of the CLOB
rs.next(); // Move the cursor to the next row.
// clobFromRow1 is no longer available.
// String substr2Clob = clobFromRow1.getSubString(51,100);
// This statement would yield an SQLException
Clob clobFromRow2 = rs.getClob(1);
// Put the CLOB from the first column of
// the second row in an application variable
rs.close(); // Close the ResultSet.
// clobFromRow2 is also no longer available.rs.next() を実行してカーソルを ResultSet の 2 番目の行に置いた後は、clobFromRow1 内の CLOB 値は使用できなくなります。 同様に、 rs.close() を実行して ResultSet を閉じた後は、 clobFromRow1 および clobFromRow2 の値は利用できなくなります。プログレッシブストリーミングを無効にすると、 IBM Data Server Driver for JDBC and SQLJ LOBを処理する方法は、 fullyMaterializeLobData プロパティの値によって異なります。
連続ストリーミングの使用は、LOB または XML データ検索に推奨される方式です。