如何迭代ResultSet?我尝试使用以下代码,但是我得到错误java.sql.SQLException:对空结果集的非法操作。
while ( !rs.isLast()) {
rs.next();
int id = rs.getInt("person_id");
SQL.getInstance().getSt().execute("INSERT ref_person_pub(person_id) VALUES(" + id + ")");
}
更新:我发现了问题。我只使用了SQL单例中的一个语句。声明关闭后,不能再次使用。
答案 0 :(得分:11)
resultSet = statement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("id");
// ...
}
ResultSet#next()
将光标从当前位置向前移动一行,如果新的当前行有效,则返回true
。因此,当没有更多行时,while
循环将自动停止。
如果它应该返回零行或一行而不是多行,那么改为使用if
代替:
resultSet = statement.executeQuery();
if (resultSet.next()) {
int id = resultSet.getInt("id");
// ...
}
这样您就有机会添加else
。
更新,表示与实际问题无关,我发现您的代码中存在更多潜在问题:首先,您似乎触发了多个相互依赖的查询。这可以更有效地完成。你熟悉SQL Joins吗?二,你是不是泄漏了JDBC资源?看起来你正在获取一个声明,但没有掌握它,以便你可以在使用后正确关闭它。有关如何正确使用JDBC代码的基本说明,请参阅之前链接的JDBC教程,有关如何正确使用JDBC的几个基本启动示例,请参阅this article。否则,当数据库资源耗尽时,您的应用程序可能会迟早崩溃。
答案 1 :(得分:2)
while(rs.next()) {
// iterate
}