我想从我的数据库“日志”中选择最大行号并将其存储在一个变量中m。这是我的代码:ResultSet rs = stmt.executeQuery("Select max(Line) as L from logs");while (rs.next()) { // Why do I need this int m = rs.getInt("L"); System.out.println(m);}但它不起作用,除非我使用while(rs.next()).如果我理解正确,rs.next() 将光标移动到下一行,但在这里,在这个结果中,我只有一行。那么,有人可以解释为什么需要循环吗?我唯一能想到的是第一个光标设置在列名上,对吗?
3 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
为什么?
光标最初位于第一个元素之前。您需要提前一次以访问第一个元素。
这样做显然是因为使用循环遍历结果非常方便,如您所见。从官方文档:
将光标从当前位置向前移动一行。甲
ResultSet
光标最初位于第一行之前; 第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。
解决方案
因此,虽然您不需要任何循环,但您需要将光标移动一次。从rs.next();
技术上讲,一个就足够了:
rs.next(); // Access the result
但是,您可能想要考虑根本没有匹配项的情况,因为:
当对该
next
方法的调用返回时false
,光标定位在最后一行之后。任何ResultSet
需要当前行的方法调用都将导致SQLException
抛出。
所以在这种情况下代码会失败。
因此,您应该考虑这种情况并使用返回的值boolean
来保护您的访问权限:
if (rs.next()) { // Access result ... } else { // No match ... }
萧十郎
TA贡献1815条经验 获得超13个赞
您可以将其转换为使用简单if语句。
if(rs.next()) {
// other code here
}
while当您有不止一行要带回来时,您会使用它。
添加回答
举报
0/150
提交
取消