我的代码是:
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
。