Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

4. ラージオブジェクト

4.1. BLOBの書き込み

ラージオブジェクトは通常のデータ型では扱えないような、大きなデータを格納するための型です。画像などのバイナリデータを格納する「BLOB(binary large object)」と、テキストを格納する「CLOB(character large object)」の2種類がSQL99で規定されています。これについては、PostgreSQLを含め既に多くのデータベースでサポートされています。PostgreSQLでは以下のようにして、ラージオブジェクトを使用するテーブルを定義します。

create table product_photo(p_num int references product(p_num) primary key,
                           p_photo bytea);

プログラムでBLOBオブジェクトをデータベースに格納するには次のようにします。「PreparedStatement」の「setBinaryStream」メソッドを使用します。

1: connection.setAutoCommit(false);
2:  
3: String sql="insert into product_photo values(?,?)";
4: PreparedStatement statement=connection.prepareStatement(sql);
5:   
6: statement.setInt(1,104);
7: File file=new File("/tmp/myphoto.jpg");
8: FileInputStream input=new FileInputStream(file);
9: statement.setBinaryStream(2,input,(int)file.length());
10:statement.executeUpdate();
11:connection.commit();

9行目で「setBinaryStream」メソッドを呼び出しています。これまでの「set???」メソッドと異なり、3つ目の引数に格納するバイナリデータのサイズを指定します。最後に「executeUpdate」メソッドを呼び出しデータを格納しますが、注意点として必ずAutoCommitモードをオフにしなければなりません(1行目)。これはPostgreSQLのJDBCドライバの制約です。

実はPostgreSQLには、BLOB, CLOBを取り扱う方法として、oidデータ型も提供されています。oid型はオブジェクトの識別子を管理するデータ型で、実際のデータは他に保存します。bytea型は1ギガまでのデータしか扱えないという制約もあるのですが、ほとんどの場合、それで十分ですのでこちらのデータ型を使用するようにして下さい。

(実習課題1)

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

  • 「product_photo」テーブルに画像ファイルを格納するコンソールプログラム。
  • プログラムの引数は、製品番号と画像ファイル名。
  • 格納されたデータが、指定したファイルのデータと同じである事を確認する事。

解答例はこちら



次のページへ TECHSCOREのTOPページへ 次のページへ
TECHSCORE PR
PR
PR
PR
PR
PR

techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa