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)以下のプログラムを作成しなさい。
|
![]()
![]()
|