目次へ

4.2. BLOBの読み込み

BLOBを読み込むには次のようにします。ResultSetの「getBinaryStream」メソッドを使用します。

 connection.setAutoCommit(false);

 Statement statement=connection.createStatement();
 String sql="select photo from product_photo where p_num=104";
 ResultSet result=statement.executeQuery(sql);
 result.first();

 InputStream input=result.getBinaryStream(1);
 FileOutputStream output=new FileOutputStream("/tmp/photo.jpg");
int c;
while((c=input.read())!=-1){
  output.write(c);
}
input.close();
output.close();
connection.commit();

8行目ResultSetのgetBinaryStreamメソッドで、BLOBデータを読み込むための入力ストリームを開きます。読み込む際にも、AutoCommitモードをオフにしなければならない(1行目)事に注意してください。これもPostgreSQLのJDBCドライバの制約です。

Javaでは「java.sql.Blob」インタフェースを用いて、BLOBを扱える仕様となっています。しかしPostgreSQLではsetBinaryStream, getBinaryStreamを利用する方法とBlobを利用する方法とでは違いがあります。前者はbytea型を対象に操作を行うのに対し、後者はoid型を対象に操作を行います。oid型を対象に操作を行いたい場合には、Blobを使用するようにして下さい。ただPostgreSQLのJDBCドライバでは、setBytes, setBinaryStreamなど値を設定するためのBlobのメソッドが未実装という問題があります。ですから、どうしてもoid型を使用したいという場合には、PostgreSQLのJDBCドライバが独自に提供しているクラス「org.postgresql.largeobject.LargeObjectManager」を使用するようにして下さい。これに関する説明は、省略します。

(実習課題2)

以下のプログラムを作成しなさい。

  • 「product_photo」テーブルにある画像データを表示するウィンドウプログラム。
  • 製品番号を指定すると、それに対応する画像データがウィンドウに表示されるようにする事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ