プロが教えるわが家の防犯対策術!

JAVAのJDBCを使いMySqlを操作しデータ数を取得するプログラムです。自分なりに考えたプログラムは
Connection con = null;
String sql = "select count(*) from テーブル名";

// コネクションを作成する。
con = DriverManager.getConnection(url, user, pass);
Statement st = con.createStatement();

// SQLを実行する。
ResultSet rs = st.executeQuery(sql);
String count = rs.getString("count(*)");

実行した結果上手く出来ないのですが、この部分での間違いはありますか?

A 回答 (2件)

どう上手くいかないのかエラーメッセージなどがあると分かりやすいのですが・・・とりあえず、count(*)というカラム名は取得できなかったと思います。



sqlを
select count(*) as cnt from テーブル名
にして、

値を取得する部分を
String coung = rs.getString("cnt");
にしてみてください。
もしくはsqlはそのままで、
rs.getString(1)
で1番目のカラムが取得できます。
(カラム名が固定なら最初のやりかたの方が分かりやすいと思います。)

この回答への補足

自分が考えたやり方ではエラーメッセージ事態はなく取得した値が表示されませんでした。

教えていただいてやり方を試したところ
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:3620)
at com.mysql.jdbc.ResultSet.getString(ResultSet.java:1758)
at com.mysql.jdbc.ResultSet.getString(ResultSet.java:1822)

というエラーが発生しました。

補足日時:2004/12/18 23:42
    • good
    • 3
この回答へのお礼

ありがとうございます。
教えていただいた通りでできました。
今回のエラーの問題は他の場所でした。
お世話になりました。

お礼日時:2004/12/19 01:13

// SQLを実行する。


ResultSet rs = st.executeQuery(sql);
if(rs.next()) // この行を追加
String count = rs.getString("count(*)");

試していないので確かではないですが、
ResultSetオブジェクトは取得した初期の状態ではカーソルが先頭行の前(つまりデータが存在しないところ)にあるため、必ずnext()メソッドを呼び出して先頭行にカーソル移動するのではなかったでしょうか。

的外れだったらごめんなさい!
    • good
    • 1
この回答へのお礼

ありがとうございます。さっそく試してみます!

お礼日時:2004/12/18 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A