java.sql.SQLException:已用尽的Resultset

时间:2010-08-17 11:42:26

标签: java sql oracle jdbc

我收到错误 java.sql.SQLException:Exhausted ResultSet 以对Oracle数据库运行查询。连接是通过Websphere中定义的连接池实现的。执行的代码如下:

            if (rs! = null) (
                while (rs.next ()) (
                    count = rs.getInt (1);
                )
            )

我注意到结果集包含数据(rs.next())

由于

9 个答案:

答案 0 :(得分:31)

我在处理结果集后尝试访问列值时看到了这个错误。

if (rs != null) {
  while (rs.next()) {
    count = rs.getInt(1);
  }
  count = rs.getInt(1); //this will throw Exhausted resultset
}

希望这会对你有所帮助:)。

答案 1 :(得分:4)

试试这个:

if (rs != null && rs.first()) {
    do {
        count = rs.getInt(1);
    } while (rs.next());
}

答案 2 :(得分:2)

如果您将结果集重置为顶部,使用rs.absolute(1)将无法获得用尽的结果集。

while (rs.next) {
    System.out.println(rs.getString(1));
}
rs.absolute(1);
System.out.println(rs.getString(1));

您也可以使用rs.first()而不是rs.absolute(1),它也是如此。

答案 3 :(得分:2)

当没有从数据库返回特定条件的记录时以及当我尝试访问rs.getString(1)时;我收到此错误“耗尽结果集”。

在问题出现之前,我的代码是:

rs.next();
sNr= rs.getString(1);

修复后:

while (rs.next()) {
    sNr = rs.getString(1);
}

答案 4 :(得分:2)

在while循环之外使用ResultSet时会发生此异常。请将所有与ResultSet相关的处理保留在While循环中。

答案 5 :(得分:1)

这通常发生在重新使用stmt butexpecting不同的ResultSet,尝试创建新的stmt和executeQuery时。它为我修好了!

答案 6 :(得分:0)

请确保res.getInt(1)不为空。 如果它可以为null,则使用 Integer count = null; 而不是int count = 0;

Integer count = null;
    if (rs! = null) (
                    while (rs.next ()) (
                        count = rs.getInt (1);
                    )
                )

答案 7 :(得分:0)

错误背后的问题:如果您尝试访问Oracle数据库,则在事务成功之前无法访问插入的数据并且要完成事务,您必须触发{{1将数据插入表后查询。因为Oracle数据库默认情况下不处于自动提交模式。

解决方案:

转到SQL PLUS并按照以下查询进行操作..

commit

答案 8 :(得分:0)

您收到此错误是因为您在resultSet.next()方法之前使用了resultSet。

要获得计数,只需使用它:

while(rs.next()) `{    count = rs.getInt(1);  }

你会得到你的结果。