JDBCのResultSetとCachedRowSetについて
ResultSetとは?
SQL実行結果から、データを取得するためのインタフェース。
下記のようなメソッドの返り値として使われる。
Statement.executeQuery();
PreparedStatement.executeQuery();
カーソル
ResultSetでは現在の行位置のことをカーソルと言う。
一番最初は、先頭行の1つ前にカーソルがある。
.next();で次のカーソルに移動出来る。
次のカーソルが存在しなくなったら、falseを返す。
CachedRowSetとは?
ResultSetの結果をメモリ上にキャッシュとして保存できるインタフェース
SQLの実行結果であるResultSetを別のオブジェクトに詰め替えることなくメモリに保持したい。
そういう場合に、CachedRowSetを用いる。
ResultSetはStatementやConnectionが閉じられると同時に閉じられてアクセス出来なくなる。
参考: オフラインのResultSetとしてCachedRowSetを使う方法 - seraphyの日記
CachedRowSetの使用方法
Java SE6以前
import com.sun.rowset.CachedRowSetImpl; CachedRowSet cachedRowSet = new CachedRowSetImpl;
Java SE7以降
RowSetFactory rowSetFactory = RowSetProvider.newFactory(); CachedRowSet cachedRowSet = rowSetFactory.createCachedRowSet();
※RowSetFactoryはデフォルトだと com.sun.rowset.RowSetFactoryImpl()が使用される。
下記がOpenJDKでの実装内容
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/com/sun/rowset/RowSetFactoryImpl.java/
これを見るとJava SE6と同様に com.sun.rowset.CachedRowSetImpl();を使用していることが分かる。