在几次 next() 调用后从 ResultSet 获取 RowCount

Get RowCount from a ResultSet after a few next() calls

我有以下代码:

//rs is a ResultSet from a prepared statement
rs.last();
this.resultCount = rs.getRow();
rs.beforeFirst();

如果我在执行了一些 rs.next() 之后执行该代码,那么 rs.beforeFirst() 是错误的。

所以我的问题是:我怎样才能回到当前位置而不是 beforeFirst 位置?

问题: "how can I get back to the current position and not to the before the first position."

答案:可以使用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() 如果 resultSet 类型是 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