LGA*_*GAP 8 java jdbc resultset
Resultset rs=stmt.executeQuery("select count(*) from feedsca group by score order by score");
Run Code Online (Sandbox Code Playgroud)
使用上面的上述java代码,我从名为feedsCA的表中检索行数.
虽然试图检索使用rs.getInt计数(1),rs.getInt(2),rs.getInt(3),I结束与一个错误如下说
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)
Run Code Online (Sandbox Code Playgroud)
更新:
上述例外已经解决.
但我得到以下异常,我不知道原因.请指教.
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)
Run Code Online (Sandbox Code Playgroud)
这就是我更新程序的方式.找到一个合乎逻辑的方法,因为我可以理解,下面的循环将无法按要求工作.
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));}
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 12
您必须将结果集的光标移动到一行 - by resultSet.first()或by resultSet.next().最初光标指向第一行之前,因此您的异常.
当你想迭代ResultSet:
while(rs.next()) {
...
}
Run Code Online (Sandbox Code Playgroud)
更新:对于你的第二个问题 - (正如卡萨布兰卡所说)你的查询似乎只返回一列,你要求的是第二和第三 - 而且找不到它们.请注意,in rs.getX(idx) idx是列,而不是行.
您需要rs.next()在访问第一行之前调用.
通常,您将迭代结果集,如下所示:
ResultSet rs = ...;
while (rs.next()) {
...
}
Run Code Online (Sandbox Code Playgroud)
更新:请注意,SELECT COUNT(*) ...每行只返回一个字段,即计数.您可能有多行,但每行只有一个字段,其中包含索引1.您需要遍历行以获取所有计数:
while (rs.next()) {
System.out.println(rs.getInt(1));
}
Run Code Online (Sandbox Code Playgroud)
还有一个更新:假设您的查询总是只返回3行是不好的.但是,如果你完全确定这一点,那么你可以next手动调用3次:
long l1, l2, l3;
rs.next();
l1 = rs.getLong(1);
rs.next();
l2 = rs.getLong(1);
rs.next();
l3 = rs.getLong(1);
pw.printf(rowFormat, l1,"0",l2,l3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23650 次 |
| 最近记录: |