我的代码是:

        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)

最佳答案

如果该语句返回更新计数或该语句的类型不返回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()的ResultSet中的第一行时使用FORWARD_ONLY

09-27 02:27