操作手順
データベースの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の現在行を移動してください。
以下に各項目の設定方法を示します。