- - PR -
ResultSetのカーソル数について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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(); // 命令文クローズ | ||||||||
|
投稿日時: 2005-10-25 20:17
count(*) でもやはり5が帰ってきますか?
| ||||||||
|
投稿日時: 2005-10-25 20:28
インギ 様
返信ありがとうございます。 count(*) とはSQL分のことでよろしいでしょうか? select count(*) from テーブル名 以上の結果は『5』でした。 ちなみに、使用SQL文は簡略化して select * from テーブル名 です。 | ||||||||
|
投稿日時: 2005-10-26 00:41
問題の本質からは離れてしまいますが、getColumnCountはおっしゃる通り「項目数」 つまりカラム数ですね。 一方、プログラムで求めようとしているのは「件数」のようです。 もし差し支えなければ、 ResultSet rset = stmt.executeQuery(sql); のあとに System.out.println(sql); を挿入し、その結果を会議室に貼りつけていたたけませんでしょうか? | ||||||||
|
投稿日時: 2005-10-26 09:45
ひら様
返答が遅くなってすみません。 早速ですが、 System.out.println(sql); の結果は 『select * from HpHostMstData』 です。 ソースの目的は、 検索結果を取得することなのですが、 rset.next()が『false』なのでできません。 rsetの中身の件数がわかればよいのですが、 リファレンスなどを見ても、 ResultSetの中身の件数の求めることができません。 何か方法を知っていましたら、ご教授ください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2005-10-26 10:01
ResultSetの中身の件数を取得するということでしたら、java.sql.ResultSetで取得したデータの数を得たいのですが?がそのものズバリではないかと思います。
ところで、
では、読んだ端からデータが捨てられていくだけで意味がないように思うのですが…… #というか、rsetを2連続でcloseしていたりと、意味不明です…… | ||||||||
|
投稿日時: 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)); と書き換えたらどうなりますでしょうか? | ||||||||
|
投稿日時: 2005-10-26 17:45
永井和彦 様
返信ありがとうございます >rsetを2連続でclose・・・ すみません、コピペミスです。 rset.close(); // 結果セットクローズ stmt.close(); // 命令文クローズ ひら様 返信ありがとうございます 結果を申し上げます。 申し訳ありません。 問題点はソースではなく、見ているDBが違っていました。 開発用、本番用と二つのDBがあり、 開発用を見ていると思っていたのですが、 実際は本番用をみていました。 開発用には5件、本番用には1件データがあり、 オラクルブラウザでも開発用を見ていました。 (SQLの確認もこちらでしていました) ソースはあっていたようです。 ひら様をはじめ、返信をいただいた皆様。 こんな基礎的な部分で余計な時間をとらせてしまい、 申し訳ありませんでした。 今後は、まず環境を疑って開発して行きたいと思います。 色々とありがとうございました。 |