あなたはResultSetをmodelに入れていませんか?CachedRowSetという強い味方。

あなたはResultSetをmodelに入れていませんか?
実はCachedRowSetという強い味方がいるんです。


CachedRowSetって何?という方。
まずは下記のリファレンスを読みましょう。

http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html

英語です。
読む気になりません。

こちらの記事のほうが良いでしょう。

オフラインのResultSetとしてCachedRowSetを使う方法
http://d.hatena.ne.jp/seraphy/20140202

つまりデータベースから取得したデータを
そのまま保持できるというわけです。
ものすごく便利ですよね?

ResultSetの結果をmodelに入れなおして、
その変数を使用するといった実装をする方が多いと思います。

しかし、CashedRowSetを使うことで下記のように
スマートにメモリに保持することができます。

   // CachedRowSetを作成
   RowSetFactory rowSetFactory = RowSetProvider.newFactory();
   CachedRowSet rowSet = rowSetFactory.createCachedRowSet();

   // データベースのクエリ結果のResultSetをCachedRowSetに設定する.
   try (Connection conn = ds.getConnection()) {
       try (PreparedStatement stm = conn.prepareStatement("select col1, col2, col3 from hogehoge");
            ResultSet rs = stm.executeQuery()) {
           rowSet.populate(rs);
       }
   }