10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

javaでExcelをBlobに変換して保存、DBから読み込んでファイル出力してみる!

Last updated at Posted at 2018-06-10

Webアプリでファイルをダウンロードするとき・・
ファイルサーバを立てるのが真っ先に思いつくけど、こんな方法も・・
(サイズは気にしないことにする。)

1.ファイルを読み込む

main
// ファイル読み込み
File uploadFile = new File("[ディレクトリ]\\tmp.xlsx");
FileInputStream finstream = new FileInputStream(uploadFile);

いたってシンプル。

2.DBに保持する

main
Class.forName("oracle.jdbc.driver.OracleDriver");
// Oracle8iに接続
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:TEST", "system", "password");
// ステートメントを作成
Statement stmt = conn.createStatement();
// SQL定義
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO [スキーマ].test_table(file_id, deta) VALUES(0, ?)");
// ステートメントにバインド
pstmt.setBinaryStream(1, finstream, (int) uploadFile.length());
// 実行
int result = pstmt.executeUpdate();

setBinaryStreamでバイナリ化してセットする。

3.DBからバイナリデータを取り出す

main
// バイナリデータ取得
ResultSet rset = stmt.executeQuery("select deta from [スキーマ].upload_file where file_id = '0'");
// Blobデータを取得してファイルに出力
Blob blob = null;
while (rset.next()) {
	blob = rset.getBlob("deta");
}
byte[] buffer = blob.getBytes(1, (int) blob.length());

getBytesでbyte配列に格納

4.ファイルに吐き出す

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

シンプルにファイルを生成して書き込む。

5.お決まりのクローズ処理

main
// 結果セットをクローズ
rset.close();
// ステートメントをクローズ
stmt.close();
// 接続をクローズ
conn.close();

// tmpファイル削除
uploadFile.delete();

各種クローズ。と、アップロードしたtempファイルを削除。
指定したディレクトリにファイルが生成される。

6.課題:man_tone1:

前回POIを使ってExcelを生成したけど、
ファイル生成処理とバイナリ化してDBに保持を同じフローでやりたい・・
(一回tempファイルとして吐き出して、それを読み直してバイナリ化してる)

ちょっとパッと思いつかないので、次回にやってみよう!

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?