为什么这里需要“while (rs.next())”?

我想从我的数据库“日志”中选择最大行号并将其存储在一个变量中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() 将光标移动到下一行,但在这里,在这个结果中,我只有一行。


那么,有人可以解释为什么需要循环吗?我唯一能想到的是第一个光标设置在列名上,对吗?


侃侃尔雅
浏览 355回答 3
3回答

杨__羊羊

为什么?光标最初位于第一个元素之前。您需要提前一次以访问第一个元素。这样做显然是因为使用循环遍历结果非常方便,如您所见。从官方文档:将光标从当前位置向前移动一行。甲ResultSet光标最初位于第一行之前; 第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。解决方案因此,虽然您不需要任何循环,但您需要将光标移动一次。从rs.next();技术上讲,一个就足够了:rs.next(); // Access the result但是,您可能想要考虑根本没有匹配项的情况,因为:当对该next方法的调用返回时false,光标定位在最后一行之后。任何ResultSet需要当前行的方法调用都将导致SQLException抛出。所以在这种情况下代码会失败。因此,您应该考虑这种情况并使用返回的值boolean来保护您的访问权限:if (rs.next()) {     // Access result ...     } else {         // No match ...         }

收到一只叮咚

从官方文档(你应该已经阅读 btw):最初光标位于第一行之前。next 方法将光标移动到下一行,因为当 ResultSet 对象中没有更多行时它返回 false,所以可以在 while 循环中使用它来遍历结果集。你基本上需要移动它,在你的情况下移动一次就足够了: rs.next();   System.out.println(rs.getInt("L"));

萧十郎

您可以将其转换为使用简单if语句。if(rs.next()) {    // other code here}while当您有不止一行要带回来时,您会使用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java