直列化したデータをDBに突っ込む

シリアライズしたオブジェクトは、DBのバイナリデータ型のカラムに登録することができる。生成にコストがかかって、かつセッションに保持するとメモリを食い潰しそうなオブジェクトの保存方法のひとつとして、この手段を検討したい。

Connection conn = null;
PreparedStatement ps = null;

// 指定オブジェクトを直列化 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(baos); out.writeObject((Serializable) contents); int buffer = baos.size();
// DBへの書き出し用ストリームの作成 InputStream in = new ByteArrayInputStream(baos.toByteArray());
// 直列化したオブジェクトを InputStream に書出 baos.flush();
try { String sql = "INSERT INTO table(contents) VALUES (?)"; conn = getConnection(); ps = conn.parepareStatement(sql); ps.setBinaryStream(1, in, buffer); ps.executeUpdate } catch (Exception e) { e.printStackTrace(); } finally { if (ps != null) ps.close(); if (conn != null) conn.close(); }

サンプルとしてざっくり書いてみたけど、こんな感じで大丈夫のはず。とりあえずメモなんで、動かしてないです。間違いあったら、すんません。

ちなみに、ByteArrayOutputStream の close には意味が無いらしい。転送先にデータを書き出すためには、明示的に flush する必要があるとのこと。標準APIのjavadocに書いてあったので、多分そうなんだと思います。(おいおい)

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/372





最新エントリー
転職しました
coLinuxで複数環境を作る
MySQLで実行中のSQLをキャンセルする
javascriptで簡単に経過ミリ秒を取得する方法
IFRAME では src 属性を必ず指定した方が良いわけ
Eclipse3.4 で javadoc を生成する
tomcat6.0.18 のEL不具合
PostgreSQLでMONTHS_BETWEEN
VB.NETでコンソール非表示のバッチアプリを作る
Enum Factory Pattern
あわせて読みたいブログパーツ