- PR -

ResultSetのカーソル数について

投稿者投稿内容
kenken123
会議室デビュー日: 2005/10/25
投稿数: 4
投稿日時: 2005-10-25 19:36
基本的なことなのですが、教えてください。

javaの基本的なDB接続です。
検索結果が5件あるのですが、どうしても
『while (rset.next())』の部分のrset.next()が『false』で
返されてしまい、値が取得できません。

・SQL文はオブジェクトブラウザで確認したところ問題ありません。
・rsetには、下記のデバックコードで確認したところ
 項目数は正しくカウントされています。

単純すぎて、間違っている部分がどうしてもわかりません。
よろしくお願いいたします。


※以下 ソースコード

// JDBCステートメント作成
Statement stmt = getDBConnection().createStatement();

// 結果セットオープン
ResultSet rset = stmt.executeQuery(sql);

while (rset.next()) {
rset.getString("EMPNMKNJ") ;
}

////////デバックコード start//
int columnCount;
ResultSetMetaData metaData = rset.getMetaData();
columnCount = metaData.getColumnCount();
System.out.println("**取得データの項目数* ;"+columnCount);
////////デバックコード end////

// 終了処理
rset.close(); // 結果セットクローズ
rset.close(); // 命令文クローズ
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-10-25 20:17
count(*) でもやはり5が帰ってきますか?
kenken123
会議室デビュー日: 2005/10/25
投稿数: 4
投稿日時: 2005-10-25 20:28
インギ 様

返信ありがとうございます。
count(*) とはSQL分のことでよろしいでしょうか?

select count(*) from テーブル名

以上の結果は『5』でした。

ちなみに、使用SQL文は簡略化して
select * from テーブル名
です。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2005-10-26 00:41
引用:

kenken123さんの書き込み (2005-10-25 19:36) より:
検索結果が5件あるのですが、どうしても
『while (rset.next())』の部分のrset.next()が『false』で
返されてしまい、値が取得できません。

・rsetには、下記のデバックコードで確認したところ
 項目数は正しくカウントされています。

columnCount = metaData.getColumnCount();


問題の本質からは離れてしまいますが、getColumnCountはおっしゃる通り「項目数」
つまりカラム数ですね。

一方、プログラムで求めようとしているのは「件数」のようです。

もし差し支えなければ、
ResultSet rset = stmt.executeQuery(sql);
のあとに
System.out.println(sql);
を挿入し、その結果を会議室に貼りつけていたたけませんでしょうか?

kenken123
会議室デビュー日: 2005/10/25
投稿数: 4
投稿日時: 2005-10-26 09:45
ひら様

返答が遅くなってすみません。
早速ですが、
System.out.println(sql);  
の結果は
『select * from HpHostMstData』
です。

ソースの目的は、
検索結果を取得することなのですが、
rset.next()が『false』なのでできません。
rsetの中身の件数がわかればよいのですが、
リファレンスなどを見ても、
ResultSetの中身の件数の求めることができません。
何か方法を知っていましたら、ご教授ください。
よろしくお願いします。


永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2005-10-26 10:01
ResultSetの中身の件数を取得するということでしたら、java.sql.ResultSetで取得したデータの数を得たいのですが?がそのものズバリではないかと思います。

ところで、
引用:

コード:
while (rset.next()) {
    rset.getString("EMPNMKNJ") ;
}




では、読んだ端からデータが捨てられていくだけで意味がないように思うのですが……
#というか、rsetを2連続でcloseしていたりと、意味不明です……
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2005-10-26 10:24
// 結果セットオープン
ResultSet rset = stmt.executeQuery(sql);

while (rset.next()) {
rset.getString("EMPNMKNJ") ;
}





// 結果セットオープン
sql = "select count(*) from HpHostMstData"
ResultSet rset = stmt.executeQuery(sql);

rset.next();
System.out.println(rset.getInt(1));


と書き換えたらどうなりますでしょうか?
kenken123
会議室デビュー日: 2005/10/25
投稿数: 4
投稿日時: 2005-10-26 17:45
永井和彦 様
返信ありがとうございます
>rsetを2連続でclose・・・

すみません、コピペミスです。
rset.close(); // 結果セットクローズ
stmt.close(); // 命令文クローズ


ひら様
返信ありがとうございます

結果を申し上げます。
申し訳ありません。
問題点はソースではなく、見ているDBが違っていました。

開発用、本番用と二つのDBがあり、
開発用を見ていると思っていたのですが、
実際は本番用をみていました。

開発用には5件、本番用には1件データがあり、
オラクルブラウザでも開発用を見ていました。
(SQLの確認もこちらでしていました)

ソースはあっていたようです。


ひら様をはじめ、返信をいただいた皆様。
こんな基礎的な部分で余計な時間をとらせてしまい、
申し訳ありませんでした。
今後は、まず環境を疑って開発して行きたいと思います。

色々とありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)