SQL中的问题,java中的ResultSet

aph*_*hex 5 java jdbc resultset

我如何迭代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 + ")");
}
Run Code Online (Sandbox Code Playgroud)

更新:我发现了问题.我只使用了SQL单例中的一个语句.语句关闭后,不能再次使用.

Bal*_*usC 11

根据JDBC教程:

resultSet = statement.executeQuery();
while (resultSet.next()) { 
    int id = resultSet.getInt("id");
    // ...
}
Run Code Online (Sandbox Code Playgroud)

ResultSet#next()行动从当前位置,并返回光标向前一行true,如果新的当前行是有效的.因此,while当没有更多行时,循环将自动停止.

如果它应该返回零行或一行而不是多行,那么if改为使用:

resultSet = statement.executeQuery();
if (resultSet.next()) { 
    int id = resultSet.getInt("id");
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这样你就有机会添加一个else.

更新,说和实际问题无关,我在你的代码中看到了更多的潜在问题:首先,你似乎触发了多个相互依赖的查询.这可以更有效地完成.你熟悉SQL连接吗?二,你是不是泄漏了JDBC资源?看起来你正在获取一个声明,但没有掌握它,以便你可以在使用后正确关闭它.请参阅链接的前JDBC教程基本说明如何使用JDBC代码和正常工作这篇文章的几个基本开球例子如何正确使用JDBC.否则,当数据库资源耗尽时,您的应用程序可能会迟早崩溃.