JDBC と Collection API
- ref:http://d.hatena.ne.jp/bleis-tift/20070808/1186564456
- ref:http://d.hatena.ne.jp/bleis-tift/20070808/1186558404
JDBC でのクエリの結果は Collection で返してくれというのは分からないでもないけども、クエリの結果を Collection にしてしまうとその他の重要な情報が取得できなくなっていろいろ困る。あと、ResultSet にはカーソル的な更新の API もかねているのと、その際のエラー情報取得とかあったり。ResuletSet#fetchAll みたいなの追加とかなら分からないでもない。というか O/R Mapper はそういうことをしているんだけど。
まぁ、なんというか JDBC も抽象化レイヤーではあるけど、生々しい API にしておいて、Collection API へのマッチなんかは別の API に任せるという方針が真っ当だと思う。なんでもかんでも、On Memory にしようとしたら100万行のテーブルをカーソルで操作、とかなるとえらいことになるし*1。
つうか、JDBC/ResultSet のいけていないのは、直接結果の件数を取得する API がない (last で移動して getRow を 呼ぶという workaround)ことと、wasNull が使いにくい (最後に読み取った column が null かどうかしか分からない(primitive に null を代入できないことが原因?))だと思う。
あと、まぁ S2DAO なり Hibernate なりの O/R Mapper を使うとか、そこまででもなければ Apache Commons DbUtils の QueryRunner を使うってのがいいんでないかなぁ。