SQL中的问题,java中的ResultSet

时间:2010-03-30 13:29:29

标签: 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 + ")");
}

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

2 个答案:

答案 0 :(得分:11)

根据JDBC tutorial

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
}