Resultset rs=stmt.executeQuery("select count(*) from feedsca group by score order by score");
使用上面的 java 代码,我从名为 feedsCA 的表中检索行数。
在尝试使用 rs.getInt(1)、rs.getInt(2)、rs.getInt(3) 检索计数时,我以如下错误结束,
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The result set has no current row.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(Unknown Source)
at SimpleMail.main(SimpleMail.java:151)
更新:
上述异常已经解决。
但我得到以下异常,我不知道原因。请指教。
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The index 2 is out of range.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyValidColumnIndex(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(Unknown Source)
at SimpleMail.main(SimpleMail.java:152)
这就是我更新程序的方式。给我找到一个合乎逻辑的方法,因为我很清楚下面的循环不会按要求工作。
rs=stmt.executeQuery("select count(*) from feedsca group by score order by score");
while(rs.next()){
pw.printf(rowFormat, rs.getLong(1),"0",rs.getLong(2),rs.getLong(3));}
最佳答案
您必须将结果集的光标移动到一行 - 通过 resultSet.first()
或通过 resultSet.next()
。最初光标指向第一行之前,因此出现异常。
当您想迭代ResultSet
时:
while(rs.next()) {
...
}
更新:对于您的第二个问题 -(如 Casablanca 所述)您的查询似乎只返回一列,而您要求的是第二列和第三列 - 但未找到它们。请注意,在 rs.getX(idx)
中,idx
是列,而不是行。
关于java - 在 Java 程序中使用结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4016715/