5

如何迭代 ResultSet ?我已尝试使用以下代码,但出现错误 java.sql.SQLException: Illegal operation on empty result set。

 while ( !rs.isLast()) {
     rs.next();
     int id = rs.getInt("person_id");
     SQL.getInstance().getSt().execute("INSERT ref_person_pub(person_id) VALUES(" + id + ")");
}

更新:我发现了问题。我只使用了 SQL 单例中的一条语句。当语句关闭时,它不能再次使用。

4

2 回答 2

11

根据JDBC 教程

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 连接吗?第二,你不是在泄露 JDBC 资源吗?看起来您正在获取一个语句,但没有得到它的句柄,以便您可以在使用后正确关闭它。有关如何正确使用 JDBC 代码的基本说明,请参阅之前链接的 JDBC 教程,以及如何正确使用 JDBC几个基本启动示例。否则,当数据库耗尽资源时,您的应用程序迟早会崩溃。

于 2010-03-30T13:32:05.283 回答
2
while(rs.next()) {
   // iterate
}
于 2010-03-30T13:31:30.777 回答