大量のID(整数)を取得するためのクエリを実行しています。 ResultSetを何百回も繰り返し実行するのではなく、すべてをArrayListにコピーするのではなく、単にArrayListとしてすべてを取得する方法がありますか?JDBC ResultSetをArrayListとして取得するにはどうすればよいですか?
私はResultSetが反復されることになっていると理解していますが、基本的な実装ではキャッシングがある可能性があるので、私の状況ではすべてのIDをすぐに必要とします。私はFetchSizeを大きな数に設定できますが、それでもIDを1つずつ取得する必要があります。
明確化:これを行う理由はパフォーマンスです。プロファイリングでは、ResultSet.next()、ResultSet.getInt()およびArrayList.add()を何百回も実行するとかなりの時間がかかることがわかります。私はデータベース(私は、Javaで書かれているH2を使用している)はおそらく、メモリ内のどこかに配列やリストを持っていることを理解しているので、私はそれを私に直接コピーする代わりにResultSetの反復インタフェース。
おそらく数百万の整数を扱うのには長い時間がかかります。代わりにint []またはプリミティブList-likeが必要ですか?おそらくint/Listとして直接実装されていないかもしれません。 –
int []またはListはどちらも問題ありません。私は基本的にちょうどデータベースに言う方法を探しています:キャッシング/怠惰な読み込み/等を忘れて、できるだけ早く私にデータを与えてください:) – Deckard
プロファイルを持ち、パフォーマンスの問題がどこにあるかを見てください。 (OracleはResultSet、IIRCで列配列メソッドを取得していますが、それはH2にとって重要ではありません) –