| Symfoware Server アプリケーション開発ガイド(JDBCドライバ編) - FUJITSU - |
目次
索引
![]()
|
| 第3章 アプリケーションの作成 |
データベースのBLOBデータを参照する場合、以下の手順で行います。

データベースのBLOBデータを参照する場合の記述例を以下に説明します。
Statement stmt = con.createStatement(); (1)
ResultSet rs = stmt.executeQuery(
"SELECT COL_BLOB FROM BLOBTBL WHERE COL_INT = 1"); (2)
while (rs.next()) (3)
{
InputStream oIS = rs.getBinaryStream(1); (4)
FileOutputStream fs = new FileOutputStream("ファイル名などを指定"); (4)
byte[] bTmp = new byte[oIS.available()]; (5)
oIS.read(bTmp); (5)
fs.write(bTmp); (5)
int iBData=0; (6)
while ((iBData=oIS.read()) != -1) (6)
{
fs.write(iBData); (6)
}
oIS.close(); (7)
fs.close(); (7)
}
rs.close(); (8)
stmt.close(); (8)
con.commit(); (9) |
(1) SQL文を実行するためのオブジェクトの生成
(2) ResultSetオブジェクトの生成
(3) カーソルの位置づけ
(4) ResultSetオブジェクトからのデータ取得
(5) ストリームからのデータ読込み(byte配列)
(6) ストリームからのデータ読込み(1バイト)
(7) ストリームオブジェクトのクローズ
(8) オブジェクトのクローズ
(9) トランザクションのコミット

(5)と(6)の処理は、データのサイズ、件数または実行環境に合わせて、以下の要領で、どちらかを実行してください。
ストリームからデータを一括で取り出す場合、(5)の処理を実行する
ストリームからデータを1バイトずつ取り出す場合、(6)の処理を実行する
参照先のBLOBデータのサイズが32キロバイト以上の場合、同じBLOB列に対して複数回getXXX()を実行することはできません。同じBLOB列のデータを再取得したい場合、absolute()などを使用して、ResultSetの現在行を移動してください。
以下に各項目の設定方法を示します。
ConnectionインタフェースのcreateStatementメソッドを使用し、Statementインタフェースのオブジェクトを生成します。
StatementインタフェースのexecuteQueryメソッドを使用し、ResultSetオブジェクトを生成します。
ResultSetインタフェースのnextメソッドを使用し、カーソルの位置づけを現在の位置から1行下に移動します。
ResultSetインタフェースのgetBinaryStreamメソッドを使用し、ResultSetオブジェクトからBLOB型のデータをストリームとして取得します。
InputStreamクラスのreadメソッドを使用して、ストリームからデータをbyte配列で一括に読み込みます。
InputStreamクラスのreadメソッドを使用して、ストリームからデータを1バイトずつ-1(データなし)が返却されるまで読み込みます。
InputStreamクラスのcloseメソッドとFileOutputStreamクラスのcloseメソッドを使用して、オブジェクトをクローズします。
生成した各クラスのオブジェクトをクローズします。
ResultSetインタフェースのcloseメソッドと、Statementインタフェースのcloseメソッドを使用します。
トランザクションをコミットします。
Connectionインタフェースのcommitメソッドを使用します。
目次
索引
![]()
|