ニュース
|
Java基本
|
Servlet・JSP
|
オープンソース
|
FAQ
|
掲示板
Javaの道
>
掲示板
>
掲示板(ResultSetに入ってる件数は数えられますか?)
閲覧数:19383
掲示板(ResultSetに入ってる件数は数えられますか?)
名前
さっち
題名
ResultSetに入ってる件数は数えられますか?
質問内容
質問を評価する
(0ポイント)
データベースで取得したデータを
ResultSetに入れました。
この件数を数えることはできますか?
ResultSet RS ←データを入れる処理は省略
while(Rs.next()){
・・・
}
↑今まではwhile文で繰り返してたのですが
for文で繰り返せたらなぁと思いまして・・・
質問日時
2008-04-04 11:58:54
名前
$
回答内容
回答を評価する
(0ポイント)
なぜfor文のほうがいいと?
回答日時
2008-04-04 12:07:52
名前
さっち
回答内容
回答を評価する
(0ポイント)
すみません。
第一の目的は
取得したデータが1以上あるかないか知りたいのです。
回答日時
2008-04-04 12:34:40
名前
タスマニア三郎
回答内容
回答を評価する
(0ポイント)
う〜んと、単純に計算すればいいだけだと思いますけどね・・・
int count = 0;
ResultSet rs = ・・・;
while(rs.next()){
・・・
count++;
}
こうすると、
データがなければ、countは0のまま
データがあれば、件数分countが加算
となるんですが
回答日時
2008-04-04 13:02:37
名前
さっち
回答内容
回答を評価する
(0ポイント)
なるほど・・・
ただ、データが10000件以上あることあるので
処理が重くなってしまわないのか気がかりですが・・・
でも、何が良くて悪いのかわからない初心者なので
このやり方が一般的であるのなら
これでやってみます〜
ありがとうございます★
回答日時
2008-04-04 13:26:55
名前
$
回答内容
回答を評価する
(10ポイント)
単にレコードの有無を確認できればいいなら、
boolean isExists = rs.next();
でいいのでは?
それと、DBMSによってはSQLで抽出するレコード数を制限できる。
回答日時
2008-04-04 13:33:35
名前
さっち
回答内容
回答を評価する
(0ポイント)
boolean isExists = rs.next();
↑これ
イイですね。
ResultSetって
「最初の行から最後の行へ向かって 1 回だけ実行できる」ようなので
whileで件数を数えてしまうと
もう一度データを取得しないといけないようで・・・
回答日時
2008-04-07 11:19:14
名前
たか
回答内容
回答を評価する
(0ポイント)
自分も昔調べましたが、ResultSetからの件数取得は出来ませんでした。
なので、わざわざ
SELECT COUNT(*) FROM some_tbl
SELECT * FROM some_tbl
というSQL文を別々で実行してます。
ちなみに、
> whileで件数を数えてしまうと
> もう一度データを取得しないといけないようで・・・
rs.beforeFirst()とかrs.first()でカーソルを初期化できますよ。
回答日時
2008-04-08 18:01:16
名前
ヨッチーだぼだぼ
回答内容
回答を評価する
(30ポイント)
これじゃダメですか?
rs.last();
int cnt = rs.getRow();
rs.first();
for(int i= 0; i < cnt; i++){
・・・・
}
回答日時
2008-04-08 20:58:44
名前
$
回答内容
回答を評価する
(0ポイント)
逆方向に移動できるかってDBMSによらなかったっけ?
回答日時
2008-04-09 12:33:51
名前
a
回答内容
回答を評価する
(0ポイント)
逆方向カーソルはDBのサポートいるね。
単方向のカーソルだと、件数が多くても、
1回読めば捨てるだけなので、大抵大丈夫なんだけど、
逆方向をサポートしようとすると、一気にメモリ消費が多くなるよ。
回答日時
2008-04-11 01:23:35
名前
さっち
回答内容
回答を評価する
(0ポイント)
やっぱり使い捨てなんですかね?
rs.first(); ってやったら
「転送専用の結果セットに対する操作が向こうです。:first」
って出てしまいました・・・。
回答日時
2008-04-11 10:45:04
名前
$
回答内容
回答を評価する
(0ポイント)
ところでexecuteQuery()にResultSet.TYPE_SCROLL_INSENSITIVEとか指定してる…?
DBが対応しててもデフォルトでは順方向だけになると思うけど。
回答日時
2008-04-11 17:00:52
名前
$
回答内容
回答を評価する
(0ポイント)
createStatement()ですはい。
回答日時
2008-04-11 17:12:15
質問から6ヶ月以上経過しているので、回答を書き込むことはできません。
ツイート
ニュース
|
Java基本
|
Servlet・JSP
|
オープンソース
|
FAQ
|
掲示板