一尘不染

SQL问题,java中的ResultSet

jdbc

如何迭代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单例中的一条语句。语句关闭后,将无法再次使用。


阅读 365

收藏
2020-09-28

共1个答案

一尘不染

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

2020-09-28