- - PR -
SQLのResultSetについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-01-29 11:57
Postgres8.2、 JDK1.5 でWebサーバーの開発を行っています。
SQLで検索を行った際にResultSetで結果を取得しますが、10万件という数の結果がヒットした場合、メモリ的には大丈夫なのでしょうか? ResultSetはカーソルということで、データ容量自体はそれほど大きくないと思うのですが、この考え方はまちがっているのでしょうか? ResultSetから実際にresultSet.getString(1)などのようにデータを取得して、10万 件もオブジェクトとして保持してしまえば、メモリを圧迫するとおもうのですが、 ResultSetのままであれば、大丈夫かどうか教えていただければ幸いです。 やりたいことは、下のようなコードなのですが、 ResultSetを取得し、resultSet.absolute(start)によって開始位置までカーソルを 移動させ、必要な分だけ(20件だけとか)データを取得しようと思っています。 そして、最後にResultSetのgetRow()メソッドを呼んで、ヒットしたデータ数を 取得したいと思っています。 ご教示頂ければ幸いです。 よろしくお願いいたします。 ResultSet rs; int count = 0; int hit_count = 0; rs.absolute(start); while(rs.next()){ count++; result.addElement(getResult()); if(count==limit){ break; } } rs.last(); hit_count= rs.getRow() |
|
投稿日時: 2009-01-29 12:19
試してみればよいと思います。
小さなテーブルを作って何回か直積するだけです。 二次元配列的に蓄えるのであればすぐにOutOfMemoryでしょう。 #何年も前に調べた時にはそんな実装のドライバもありました。 |
|
投稿日時: 2009-01-29 12:37
試してみるのが一番早い話ですが・・・・
そんなこと気にするよりも、 件数を取得するSQLと 上位20件だけとか取得するSQLを流せば 気にする必要もないと思います。 |
|
投稿日時: 2009-02-26 15:24
SQL文を工夫すれば、こんな問題を考えなくてもいいです。
例えば: sqlserverのtop oracleのrownum |
|
投稿日時: 2009-02-28 19:02
ご回答ありがとうございました。
offset, limitが使えないDBを利用して組んだプログラムがすでにあり、それを使い まわしたかったため、上記のような質問をした次第です。 今回はpostgresを使うため、limit, offsetを使って、プログラムを改変して使おうと思います。 |
|
投稿日時: 2009-03-01 18:19
Statement.setFetchSizeを使います。
http://jdbc.postgresql.org/documentation/82/query.html#query-with-cursor いくつかある制限事項にも注意してください。 |
1