0

Java で次のクエリを実行すると、Java はテーブルの最初のエントリのみをエラーなしで返します。しかし、同じクエリを Access にコピーすると、Access は 33 エントリすべてを返します。

クエリ:

SELECT Country, Sum(SumOfNumber) AS number FROM CountryList WHERE Year=2012 AND (Month=1 Or Month=2 Or Month=3) AND Entity='xxx' GROUP BY Country ORDER BY Sum(SumOfNumber) DESC

rs.last();
System.out.println(rs.getRow());

1 を返します。

何かアドバイス?

さて、私は「ORDER BY Sum(SumOfNumber) DESC」を削除し、Javaはすべての国を返し、最後に「無効なカーソルステータス」という例外をスローしました

public void doconnect(){
    try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
        conn = DriverManager.getConnection(ConnectURL,user,pw);
        Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);


        String query = "SELECT Country, Sum(SumOfNumbers) AS number FROM CountryList WHERE Year=2012 AND (Month=1 Or Month=2 Or Month=3) AND Entity='xxx' GROUP BY Country ORDER BY Sum(SumOfNumbers) DESC";
        System.out.println(query);
        ResultSet rs = stmt.executeQuery(query);

        while(rs.next()){
            System.out.println(rs.getString("Country"));
        }
        rs.close();

    }
    catch(Exception e){
        System.err.println(e);
        e.printStackTrace();
    }
    finally{
        if(conn!=null){
            try{
                conn.close();

            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}
4

4 に答える 4

1

変化する

rs.last();
System.out.println(rs.getRow());

to (すべての国を取得する)

while (rs.next()) {
    System.out.println(rs.getString("Country"));
}

最後の行だけでなく、すべての行から結果を取得します。

于 2012-09-21T11:23:28.930 に答える
0

もちろん、1行(最後の行)しか取得できません。これは、を使用してResultSetの最後の行に直接移動するためですrs.last()。すべての行が返されるように、ResultSetを反復処理してみてください。

返される行数を確認するには、query:を実行SELECT count(*) as count FROM CountryList WHERE Year=2012 AND (Month=1 Or Month=2 Or Month=3) AND Entity='xxx'してから、を使用してカウントを取得します。

while(rs.next()){
  int count = rs.getInt("count");
}
于 2012-09-21T11:26:53.373 に答える
0

From Java API resultSet.last() カーソルをこの ResultSet オブジェクトの最後の行に移動します。 ここでチェックして、rs.lastを削除し、このように結果セットを繰り返します

 while(rs.next()) {
    sysout(rs.getString("your column name"));
 }
于 2012-09-21T11:22:52.710 に答える
0

rs.last()カーソルを最後の行に移動しますresultSet。これは、行を読んだ後、それ以上データが利用できないことを意味します。また、によって提供される関数を使用することをお勧めします

Keppil: while (rs.next()) { System.out.println(rs.getRow()); }

于 2012-09-21T11:29:55.727 に答える