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。

有什么建议吗?

好的,现在我删除了therm“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

rs.last()将光标移动到最后一行,resultSet这意味着在您阅读该行之后,没有更多数据可用,我也建议您使用提供的功能

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

于 2012-09-21T11:29:55.727 回答
0

当然,您只会得到一排(最后一排)。这是因为您使用 直接转到 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

来自 java API resultSet.last() 将光标移动到此 ResultSet 对象的最后一行。 在此处检查,删除 rs.last 并像这样遍历结果集

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