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メソッドを使用します。
目次 索引 |