0
ResultSetに入ってる件数は数えられますか?
データベースで取得したデータを
ResultSetに入れました。
この件数を数えることはできますか?
ResultSet RS ←データを入れる処理は省略
while(Rs.next()){
・・・
}
↑今まではwhile文で繰り返してたのですが
for文で繰り返せたらなぁと思いまして・・・
0
データベースで取得したデータを
ResultSetに入れました。
この件数を数えることはできますか?
ResultSet RS ←データを入れる処理は省略
while(Rs.next()){
・・・
}
↑今まではwhile文で繰り返してたのですが
for文で繰り返せたらなぁと思いまして・・・
30
なぜfor文のほうがいいと?
0
すみません。
第一の目的は
取得したデータが1以上あるかないか知りたいのです。
0
う〜んと、単純に計算すればいいだけだと思いますけどね・・・
int count = 0;
ResultSet rs = ・・・;
while(rs.next()){
・・・
count++;
}
こうすると、
データがなければ、countは0のまま
データがあれば、件数分countが加算
となるんですが
0
なるほど・・・
ただ、データが10000件以上あることあるので
処理が重くなってしまわないのか気がかりですが・・・
でも、何が良くて悪いのかわからない初心者なので
このやり方が一般的であるのなら
これでやってみます〜
ありがとうございます★
20
単にレコードの有無を確認できればいいなら、
boolean isExists = rs.next();
でいいのでは?
それと、DBMSによってはSQLで抽出するレコード数を制限できる。
0
boolean isExists = rs.next();
↑これ
イイですね。
ResultSetって
「最初の行から最後の行へ向かって 1 回だけ実行できる」ようなので
whileで件数を数えてしまうと
もう一度データを取得しないといけないようで・・・
0
自分も昔調べましたが、ResultSetからの件数取得は出来ませんでした。
なので、わざわざ
SELECT COUNT(*) FROM some_tbl
SELECT * FROM some_tbl
というSQL文を別々で実行してます。
ちなみに、
> whileで件数を数えてしまうと
> もう一度データを取得しないといけないようで・・・
rs.beforeFirst()とかrs.first()でカーソルを初期化できますよ。
180
これじゃダメですか?
rs.last();
int cnt = rs.getRow();
rs.first();
for(int i= 0; i < cnt; i++){
・・・・
}
0
逆方向に移動できるかってDBMSによらなかったっけ?
0
逆方向カーソルはDBのサポートいるね。
単方向のカーソルだと、件数が多くても、
1回読めば捨てるだけなので、大抵大丈夫なんだけど、
逆方向をサポートしようとすると、一気にメモリ消費が多くなるよ。
0
やっぱり使い捨てなんですかね?
rs.first(); ってやったら
「転送専用の結果セットに対する操作が向こうです。:first」
って出てしまいました・・・。
0
ところでexecuteQuery()にResultSet.TYPE_SCROLL_INSENSITIVEとか指定してる…?
DBが対応しててもデフォルトでは順方向だけになると思うけど。
0
createStatement()ですはい。
質問から6ヶ月以上経過しているので、回答を書き込むことはできません。