结果集:做 ... 而 (...);与 while(...) ... [重复]

Posted

技术标签:

【中文标题】结果集:做 ... 而 (...);与 while(...) ... [重复]【英文标题】:ResulSet: do ... while (...); vs. while(...) ... [duplicate]结果集:做 ... 而 (...);与 while(...) ... [重复] 【发布时间】:2019-08-19 14:53:47 【问题描述】:

我经常看到人们在做while(resultSet.next()) ...,但这不是跳过第一行吗?它直接切换到下一行。

你不应该改用do ... while (resultSet.next());吗?

【问题讨论】:

在使用 next() ;) 之前尝试访问第一个结果。 【参考方案1】:

不,它不会跳过第一行。

next() 需要在处理第一行之前调用。

所以实际上,do ... while 解决方案不起作用,因为这样 ResultSet 就不会在循环的第一次迭代中正确定位。

【讨论】:

【参考方案2】:

不,请阅读next() java docs

将光标从当前位置向前移动一排。 ResultSet 游标最初位于第一行之前; 第一次调用 next 方法使第一行成为当前行

【讨论】:

【参考方案3】:

根据规范:

ResultSet 游标最初位于第一行之前;

所以实际上第一个next() 会将光标定位到第一行。 看 official JavaDoc

【讨论】:

【参考方案4】:

没有。

ResultSet 包含一个内部光标,该光标第一个元素之前开始。

如果您在将光标从此处移动之前尝试调用resultSet.getString("something"),它将失败(为什么不尝试一下)。

while (resultSet.next()) ... 是遍历ResultSet 的首选方式

【讨论】:

以上是关于结果集:做 ... 而 (...);与 while(...) ... [重复]的主要内容,如果未能解决你的问题,请参考以下文章

while (rs.next()) 与 if(rs.next())的区别

结果集在while循环中仅迭代一次

Oracle 查询优化的基本准则详解

C++遍历mysql结果集,一万条数据花多长时间?

10-循环与跳出

(java)如何将从数据库中查询出来的结果集转换为对应类的对象?可考虑hibernate。