• ベストアンサー

レコード件数の表示

夜分失礼します。 上記内容について教えてください。 今JAVAを用いてレコード件数(200件)を表示させようとしています。 しかし、レコードセットの表示方法しか知らず、またレコード件数をPHPで表示させる方法くらいしか検索できませんでした。どこがいけないか指摘してください。 以下にコア部分を書きます。 // ドライバクラスをロード Class.forName("org.gjt.mm.mysql.Driver"); // データベースへ接続 String url = "jdbc:mysql://localhost:3306/db"; con = DriverManager.getConnection(url,"root","**********") stmt2 = con.createStatement(); strQuery2 = " select count(*) AS RecordNums from ********** "; ResultSet rs2 = stmt2.executeQuery( strQuery2 ); SumNo = rs2.getFetchSize(); どうしてもSumNo=0となってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>「java.sql.SQLException: Before start of result set SQL 」 >というエラーが出ました。 >このエラーは何を表しているのでしょうか??(・_・?) ResultSetのURLを見てもらうと書いていますが、「初期状態では、カーソルは~」という理由で getInt(int columnIndex) メソッドを呼び出す前に next() メソッドを呼び出す必要があります。 つまり、 Connection con =DriverManager.getConnection(~); Statement stmt = con.createStatement(); String sql=""; ResultSet rs = stmt.executeQuery(sql); while(rs.next()) { int int_a = rs.getInt(~); String str_a = rs.getString(~); String str_b = rs.getString(~); } stmt.close(); con.close(); という使い方がDBへアクセスするときのひとつの流れです。(select文の結果を全て表示したいときですが) >「public int getInt(int columnIndex)」 >この宣言はするべきなのでしょうか? >これを追加すると(public int getInt;)ここがエラーになります。 どのクラスに定義しようとしていて、どんなエラーが出たのかよくわからないのでなんともいえませんが、インターフェースResultSetにはこのメソッドがすでに定義されているので、あなたがResultSetをimplementsしたクラスを作ろうとしているのならともかく、ResultSetをimplementsしたクラスを使うだけならこのメソッドを定義する必要はありません。 ところで、改行の問題はうまくいったんですか?

javatea_1985
質問者

補足

詳しいご説明、ありがとうございました。 rs.next()が抜けていたのが問題だったようです。しかし、この問題が解決するとまた別のところにエラーが出てきました。これは自力で何とかします。 改行ですが・・結局JAVAで書くのは断念し(おい! おとなしくout.println("<br>")とすることにしました。どうしたかを書くべきでした。申し訳ありません。 (〃⌒ー⌒〃)∫

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • sanaqa
  • ベストアンサー率30% (13/42)
回答No.2

こんにちわ ResultSet rs2 = stmt2.executeQuery( strQuery2 ); の後に while(rs2.next()){  SumNo = rs2.getInt(1); } を書いてください。 ResultSet取得後、next()で カーソルを現在の位置から 1 行下に移動しないと 値は取れません。 next()すれば、 SumNo = rs2.getFetchSize(); でも取れるかもしれません。(試してませんが) でも私ならgetInt()で件数は取得します。

javatea_1985
質問者

補足

ありがとうございます。 rs.next()を追加すると解決しました。 ただ、whileのなかに入れる必要はないようです。 (一つの値として取得しているので)(=´∇`=) いずれにしても、ありがとうございました。m(__)m

すると、全ての回答が全文表示されます。
回答No.1

count(*)の結果を取得したいんですよね? でしたら、 SumNo = rs2.getFetchSize(); ではなく、 SumNo = rs2.getInt(1); が正解です。 いちど、ResultSetのAPI仕様に目を通すことをおすすめします。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/sql/ResultSet.html
javatea_1985
質問者

お礼

「public int getInt(int columnIndex)」 この宣言はするべきなのでしょうか? これを追加すると(public int getInt;) ここがエラーになります。

javatea_1985
質問者

補足

ご解答ありがとうございます。 実はSQLコマンドのことはよく知らないのです。 API使用の参考の仕方から覚えようと努力します。 また、上記方法で試してみたのですが、 「java.sql.SQLException: Before start of result set SQL 」 というエラーが出ました。 このエラーは何を表しているのでしょうか??(・_・?)

すると、全ての回答が全文表示されます。

関連するQ&A