【问题标题】:SQLException: Exhausted Resultset oracle11gSQLException:用尽的结果集 oracle11g
【发布时间】:2012-03-12 09:57:17
【问题描述】:

我的代码是:

        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)

【问题讨论】:

    标签: java jdbc oracle11g


    【解决方案1】:

    如果语句返回更新计数或语句的类型不返回ResultSet,则Statement.execute() 的布尔结果为假。 Javadoc 的语言有点含糊。

    你需要做的不是rset.first()

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

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

    【讨论】:

      【解决方案2】:

      只需尝试删除rset.first(); 行....尝试它可能会工作..我从未使用过 rset.first();

      【讨论】:

        【解决方案3】:

        我认为这段代码在各方面都是错误的。我会阅读JDBC tutorial 并按照您在其中找到的成语进行操作。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 2011-04-12
        • 1970-01-01
        • 2014-06-06
        • 2011-12-15
        相关资源
        最近更新 更多