Java Doma2でBlob変換してDB格納後に読み出してファイル出力する方法

Java Doma2でBlob変換してDB格納後に読み出してファイル出力する方法です。

Java Doma2でBlob変換してDB格納後に読み出してファイル出力する方法

Doma2はJavaのDBアクセスフレームワークです。今回はDoma2を使って、データベースのデータ型であるBLOB(Binary Large Object)へ格納し、その後Selectしてファイル出力するということを試してみたいと思います。

ここでは Java Doma2でBlob変換してDB格納後に読み出してファイル出力する方法 を紹介します。


環境構築

環境は下記の通りです。

  • Java 8
  • Spring Boot 2.2.2
  • Oracle 11g

Spring BootとDoma2を連携する方法は「Spring BootとDoma2を連携してOracle接続する方法」を参考にどうぞ。

テーブルはこんな感じです。

CREATE TABLE BLOB_TEST (
  BID   VARCHAR2(25) NOT NULL,
  BDATA BLOB,
  CONSTRAINT PK1 PRIMARY KEY (BID) USING INDEX
);

ここでは格納するバイナリデータはExcelファイルを使用しますが、画像ファイルやPDFなど、まあなんでもいいですよ。

格納するバイナリデータはExcelファイルを使用

これで準備は整いました。

Doma2でBlob変換してDBへ格納する

BlobTestDaoに追加

Daoのメソッドに@BlobFactoryアノテーションを注釈します。

@BlobFactory
Blob createBlob();

これでjava.sql.Blobが生成されます。

ファイル読み込み

該当のファイルを指定して読み込みます。

ここではtest.xlsxを読み込みます。

// ファイル読み込み
File updFile = new File("[指定ディレクトリ]/test.xlsx");
FileInputStream fis = new FileInputStream(updFile);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bs = new byte[1024];
int size = 0;
while( ( size = fis.read( bs ) ) != -1 ){
  baos.write( bs, 0, size );
}
fis.close();

Blob変換してDBへ格納

Blob変換してDBへ格納します。

// DBへ保存
Blob bl = blobTestDao.createBlob();
bl.setBytes(1, baos.toByteArray());
BlobTest entity = new BlobTest();
entity.setBid("1");
entity.setBdata(bl);
blobTestDao.delete(entity);
blobTestDao.insert(entity);

おおー、保存されましたー^^

Blob変換してDBへ格納された

Blobを取得してファイル出力する

次に格納したBlobを取得してファイル出力します。

バイナリデータ取得

格納したバイナリデータを取得します。

// バイナリデータ取得
BlobTest entity = blobTestDao.selectById("1");
byte[] buffer = entity.getBdata().getBytes(1, (int) entity.getBdata().length());

ファイル出力する

取得したバイナリデータに対してファイル名を指定して出力します。

// 出力ファイルを指定する
File outFile = new File([指定ディレクトリ]/test_output.xlsx");
DataOutputStream dos = new DataOutputStream(new FileOutputStream(outFile));
// byte配列を書き込む
dos.write(buffer);
dos.close();

おおおー、ファイル出力されたー^^

バイナリデータがファイル出力された

まとめ

Java Doma2でBlob変換してDB格納し、読み出してファイル出力する方法を紹介しました。

昔からBlob・Clobの扱いって難しいイメージがあったんですけど、Doma2だと簡単にDB格納とファイル出力ができて驚いています。

皆さんも試してみてください。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。