SQLException:用尽的结果集oracle11g

时间:2012-02-22 03:13:03

标签: java jdbc oracle11g

我的代码是:

        Statement testSt = null;
        ResultSet rset = null;
        String query = "select jid FROM playjdbc WHERE jid=56";
        try {
            testSt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);

            if (!testSt.execute(query)) {
                System.out.println("jid doesnt exist!");
            } else {

                rset = testSt.getResultSet();
                rset.first();
                int jidValue = rset.getInt(1); // exception cause
                System.out.println("jid is = " + jidValue);

            }

        }

rset.getInt(1)行导致此异常,但是 当我在我的数据库中运行相同的查询时,它返回了数据。

堆栈跟踪:

java.sql.SQLException: Exhausted Resultset
    at oracle.jdbc.driver.ScrollableResultSet.getOracleObject(ScrollableResultSet.java:623)
    at oracle.jdbc.driver.ScrollableResultSet.getInt(ScrollableResultSet.java:776)
    at oracle.jdbc.driver.UpdatableResultSet.getInt(UpdatableResultSet.java:666)

3 个答案:

答案 0 :(得分:2)

如果语句返回更新计数或者语句的类型不返回Statement.execute(),则ResultSet的布尔结果为false。 Javadoc的语言略显模糊。

而不是rset.first()你需要做什么

if (rset.next())
{
    int jidValue = rset.getInt(1); // exception cause
    System.out.println("jid is = " + jidValue);
}

rset.first()仅在移回到不是FORWARD_ONLY的ResultSet中的第一行时使用。

答案 1 :(得分:0)

我认为这段代码在各方面都是错误的。我读过JDBC tutorial并按照你在其中找到的习语。

答案 2 :(得分:0)

尝试删除rset.first();行....尝试它可能有用..我从未使用过rset.first();