我有以下代码:
//rs is a ResultSet from a prepared statement
rs.last();
this.resultCount = rs.getRow();
rs.beforeFirst();
如果我在执行了几个rs.next()
后执行该代码,那么rs.beforeFirst()
是错误的。
所以我的问题是:我怎样才能回到当前的位置而不是之前的位置第一位置?
问题:">我怎样才能回到当前位置,而不是第一个位置之前的位置。
答:您可以使用resultSet.absolute(rowIndex);
详细说明:将
光标移动到此 ResultSet 对象中的给定行号。
如果行号为正数,则游标相对于结果集的开头移动到给定的行号。第一行是第 1 行,第二行是第 2 行,依此类推。
如果给定的行号为负数,则游标将移动到相对于结果集末尾的绝对行位置。例如,调用方法absolute(-1)
将光标定位在最后一行;调用该方法absolute(-2)
将光标移动到next-to-last
行,依此类推。
如果指定的行号为零,则光标将移动到第一行之前。
但是,您可以在程序中使用absolumte(rowIndex)
,例如:
int currRowIndex = resultSet.getRow();
resultSet.last(); // <- can throw if resultSet type is TYPE_FORWARD_ONLY
this.resultCount = resultSet.getRow();
resultSet.absolute(currRowIndex); // <- It will allow you to set cursor position.
警告:当使用last()
时,如果结果集类型为 TYPE_FORWARD_ONLY,则可能会抛出。
last
boolean last() throws SQLException
Moves the cursor to the last row in this ResultSet object.<be>
Returns:
- true if the cursor is on a valid row;
- false if there are no rows in the result set
Throws:
- SQLException: if a database access error occurs; this method is called on a closed result set or the result set type is TYPE_FORWARD_ONLY
- SQLFeatureNotSupportedException: if the JDBC driver does not support
this method