如果我在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();
}
}
}
}
答案 0 :(得分:1)
更改
rs.last();
System.out.println(rs.getRow());
(以获得所有国家/地区)
while (rs.next()) {
System.out.println(rs.getString("Country"));
}
从所有行而不是最后一行获得结果。
答案 1 :(得分:0)
来自java API resultSet.last() 将光标移动到此ResultSet对象的最后一行。 Check it here, 删除rs.last并像这样迭代结果集
while(rs.next()) {
sysout(rs.getString("your column name"));
}
答案 2 :(得分:0)
当然你只得到一行(最后一行)。这是因为您使用rs.last()
直接转到ResultSet的最后一行。尝试迭代ResultSet以获取所有返回的行。
要查看返回的行数,您可以运行查询: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");
}
答案 3 :(得分:0)
rs.last()
将光标移动到resultSet
中的最后一行,这意味着在您读完该行后,没有更多数据可用,我还建议您使用<提供的功能/ p>
Keppil:while(rs.next()){ 的System.out.println(rs.getRow()); }