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など、まあなんでもいいですよ。
これで準備は整いました。
Doma2でBlob変換してDBへ格納する
まずはDoma2でBlob変換してDBへ格納します。
Doma-Genを使ってコード生成します。Doma-Genを使ったことがない方は「Spring BootでDoma-Gen2を使う方法」を参考にどうぞ。
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を取得してファイル出力する
次に格納した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格納とファイル出力ができて驚いています。
皆さんも試してみてください。
おつかれさまでした。