• ベストアンサー

レコード件数の表示

夜分失礼します。 上記内容について教えてください。 今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となってしまいます。

  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答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

  • パッケージ org.gjt.mm.mysqlは存在しません

    いつもお世話になっております。 javaから、sqlを操作するプログラムを作っているのですが、 コンパイル時に「パッケージ org.gjt.mm.mysqlは存在しません」と、 エラーが発生してしまいます。 ソースコード----------------------- import java.sql.*; import org.gjt.mm.mysql.Driver; public class HelloWorldJDBCMySQL { public static void main(String[] args) { String user = "password"; String pass = "password"; try { // ドライバクラスをロード // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBCの場合 Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合 // データベースへ接続 // Connection con = // DriverManager.getConnection("jdbc:odbc:helloworld"); // ODBCの場合 // MySQLの場合 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url,user,pass); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM test"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // nameを取得 String no = rs.getString("name"); // addressを取得 String lang = rs.getString("address"); // メッセージを取得 //String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang ); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ----------------------------------- 環境変数--------------------------- CLASSPATH .;C:\sample4\WEB-INF\lib\mysql-connector-java-5.1.12-bin.jar ----------------------------------- どなたか、ご教授いただけますでしょうか?

    • ベストアンサー
    • Java
  • resultsetによるDBへのレコード追加

    できるかできないかだけでも教えてください。 お願いいたします。 ACCESSへレコードの追加を Resultsetによってしたいと思います。 環境1 WIN2000(SP2) Forte3.0 JDK1.4 ACCESS2000  では、以下のプログラムが一部(rs.moveToCurrentRow())を除き動きます。 環境2(ハードウェアの状態よりバージョンがあげられません) win98(SP2?) Forte2 JDK1.3 ACCESS2000  では、   rs.insertRow()  で例外が発生します。 ODBCドライバのバージョンは両環境とも.6019です。 JDBCドライバのバージョンがこの原因と思われますが、 JDBCドライバあげる方法もわかりませんし、手の打ちようがありません。 環境2で insertRow の動作の仕方など ご存知の方ぜひ教えてください。 ソース try{ String drv = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:データベース名"; String usr = ""; String pw = ""; Connection con; Statement st; //接続 Class.forName(drv); con = DriverManager.getConnection(url, usr, pw); st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,                 ResultSet.CONCUR_UPDATABLE);   String qry="SELECT * FROM T_table"; ResultSet rs = st.executeQuery(qry); rs.moveToInsertRow(); //データ入力 rs.updateString(1,"データ");   //省略 //insertRowが動かない rs.insertRow(); rs.moveToCurrentRow(); con.commit(); }catch(Exception e){ // System.exit(0); } }

    • ベストアンサー
    • Java
  • jspのエラー

    <%@ page contentType="text/html; charset=UTF-8" import="java.io.*, java.sql.*" %> <% Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost/database1?user=user1&password=password1&useUnicode=true&characterEncoding=UTF-8"); Statement stmt=con.createStatement(); ResultSet result=stmt.executeQuery("select * from table1;"); %> <table> <tr> <th>country</th> <th>city</th> </tr> <% while(result.next()) { %> <tr> <td> <%= result.getString(1) %></td> <td> <%= result.getString(2) %></td> </tr> <% } stmt.close(); con.close(); %> </table> でエラーがでてデータベースに接続できません メッセージは以下の通りです org.apache.jasper.JasperException: Exception in JSP: /gomitable1.jsp:12 11: Class.forName("com.mysql.jdbc.Driver"); 12: Connection con=DriverManager.getConnection("jdbc:mysql://localhost/database1?user=user1&password=password1&useUnicode=true&characterEncoding=UTF-8"); 13: Statement stmt=con.createStatement(); 14: ResultSet result=stmt.executeQuery("select * from table1;"); 15: %> 原因 javax.servlet.ServletException: Error during query: Unexpected Exception: java.io.CharConversionException message given: null このメッセージの意味もわかりません 何が悪いのでしょうか?

    • ベストアンサー
    • Java
  • mysqlへの接続が出来ません

    まずは、サンプルプログラミングをコピーして実行してみましたが、上手くいきません。 package Connection; import java.sql.*; public class DBtest { public static void main(String[] args) { //java.sql Connection con = null; Statement stmt = null; ResultSet rs = null; String sqlStr; try { //ドライバクラスをロードする Class.forName("org.gjt.mm.mysql.Driver"); //MySQLに接続 con = DriverManager.getConnection("jdbc:mysql://localhost/dbname", "8080", "password"); //ステートメント生成 stmt = con.createStatement(); //SQL文 sqlStr = "SELECT * FROM TABLE"; //SQL文実行 rs = stmt.executeQuery(sqlStr); //検索結果数だけループ while(rs.next()){ //レコードの値 int id = rs.getInt("ID"); String name = rs.getString("NAME"); //表示 System.out.println(id + ":" + name); } //クローズ rs.close(); stmt.close(); con.close(); } catch (Exception ex) { try { //クローズ if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (con != null) con.close(); } catch (Exception e) { } //エラー ex.printStackTrace(); } } } 上記はEclipseでは文法エラーはありません。で実行してみると java.sql.SQLException: Access denied for user '8080'@'localhost' (using password: YES)になります。 サンプルにはDbname、ID,Passとあるので実際のDbnameとパスワードを入れているのですが駄目です。 IDは意味が良くわからないので8080を入れてみました。 どなたか教えて下さい。お願いします。 尚、当方全くの初心者です宜しくお願い致します。

    • ベストアンサー
    • Java
  • jspとsqlの連結したページ

    <%@ page import="java.sql.*" %> <% //パラメータの取得 String keyword = request.getParameter("keyword"); //ドライバーのロード Class.forName("com.mysql.jdbc.Driver"); //DBに接続 String url = "jdbc:mysql://localhost/java4z?useUnicode=true&characterEncoding=MS932"; String user = "root"; String pass = ""; Connection con = DriverManager.getConnection(url,user,pass); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ; ResultSet rs = stmt.executeQuery(sql);%> jspとmysqlの連動したページを作っているのですが select count(*) from テーブル名;を使い 件数を表示(XX件目など)させたいのです さらに値段からXX円以上からXX円以下なども データから検索し表示させたいのですが String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ;の部分をどのように記述すればよいか 解かりません! どなたかお願いします☆()

    • ベストアンサー
    • MySQL
  • JavaでのSQL文の実行について

    JavaでのSQL文の実行について Class.forName("org.gjt.mm.mysql.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost/testdb?useUnicode=true&characterEncoding=UTF-8", "id", "pw"); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); sql = new StringBuffer(); sql.append("set @i:=0;select id,@i:=@i+1 as 'num',name,kana from table order by kana"); rs = stmt.executeQuery(sql.toString()); ResultSetMetaData rsmd = null; rsmd = rs.getMetaData(); tbl = new ArrayList<ArrayList>(); //検索結果 取得 if(rs.next()){ ・ ・ ・ ・ といった形でSQL文を実行してるのですが、うまくいきません。 MySQLのバージョンは5.1です。MySQL上でこのSQLを実行するとしっかり結果は取得できたので、Javaプログラムの書き方に問題があると思うのですが、上記のように一度で二つのSQL文を実行することはできないのでしょうか。単一のSQLの実行は正常にできています。ユーザ変数は取得された結果一覧に行番号を付与するために使っています。 2回に分けてこのSQLが実行できるのであれば、その方法でも良いので教えてもらいたいです。 つたない説明で申し訳ないですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • JDBC PostgreSQLで必要なファイルはあるのでしょうか?

    LinuxでPostgreSQLのデータベースをJDBCでアクセスしたいのですが、以下のソースで次のエラーが発生します。何か必要なファイルでもあるのでしょうか? java.lang.ClassNotFoundException:org.postgres.Driver また、LinuxのODBCも必要なファイルがあるのでしょうか? import java.sql.*; class jdbcSample2 { public static void main(String argv[]) { int a; String b; try { //Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); //String url = "jdbc:odbc:test"; Class.forName ("org.postgres.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/test"; String user = ""; String password = ""; Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement (); String query = "select * from member;"; ResultSet rs = stmt.executeQuery (query); while(rs.next()){ a = rs.getInt(1); b = rs.getString(2); System.out.println(a + ", " + b); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } } }

  • NetBeansではAccessのファイルから取得したデータを出力欄に表示できないのですか?

    開発環境にNetBeansを使っています。以下のプログラムを実行したときに出力欄に実行成功と表示されますが、データの値が表示されません。 コマンドプロンプトからの実行結果ではデータの値を表示しました。 どのようにすれば表示するのでしょうか? import java.sql.*; public class Main { static final String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"; static final String sql = "SELECT * FROM ハローテーブル"; public static void main(String[] args) { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection(str, "", ""); Statement stmt = con.createStatement(); System.out.println(sql); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ int no = rs.getInt("No"); String lang = rs.getString("言語"); String msg = rs.getString("メッセージ"); System.out.println(no + " " + lang + " " + msg); } stmt.close(); con.close(); }catch(Exception e){ e.getStackTrace(); } } }

    • ベストアンサー
    • Java
  • JListに一覧にして表示

    データベースから取得した結果を JListに一覧にして表示させたいのですが、 list.setText(table);の部分の setTextメソッドでシンボルが見つけられないと エラーが出てしまいます。 JListにsetTextを使っているからなのだと思いますが、 APIを探したのですがなかなかわかりません どう対処したらよいでしょうか?? private Connection connect() throws Exception{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/???"; String user = "root"; String pass = ""; Connection con = DriverManager.getConnection(url,user,pass); return con; } Bookmark(){ JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("表示", createPanel1()); } private JPanel createPanel1(){ JPanel p = new JPanel(); JList list = new JList(); JScrollPane scrollPane = new JScrollPane(); scrollPane.getViewport().setView(list); scrollPane.setPreferredSize(new Dimension(480, 340)); p.add(scrollPane); try{ //DBに接続 Connection con = connect(); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql ="select * from Browser"; ResultSet rs = stmt.executeQuery(sql); //結果の取得 while(rs.next()){ String name = rs.getString("name"); String address = rs.getString("address"); String table = "<html><table>" + "<td>" + name + "</td>"+ "<td>"+ address +"</td>"+ "</table></html>"; list.setText(table); } //切断 con.close(); } catch(Exception ex) { System.out.println(ex);

    • ベストアンサー
    • Java
  • データ数をカウントしたいのですが

    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(*)"); 実行した結果上手く出来ないのですが、この部分での間違いはありますか?

    • ベストアンサー
    • Java

専門家に質問してみよう