ひよっこPGのブログ

主に、技術メモや英語たまにギター関連のことも書いているブログです。

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();を使用していることが分かる。