rs.last() 为仅向前结果集提供无效操作:last

2022-09-02 02:59:05

我正在尝试通过以下方式获取结果集的行计数:

rs.last();
int row_count = rs.getRow();

但是我得到一个错误。结果集从 Oracle 10g 数据库获取其数据。Invalid operation for forward only resultset : last

以下是我如何设置连接:

    Class.forName("oracle.jdbc.driver.OracleDriver");
    String connectionString = "jdbc:oracle:thin:@" + oracle_ip_address + ":" + oracle_db_port + ":" + oracle_db_sid;
    Connection conn = DriverManager.getConnection(connectionString, oracle_db_username, oracle_db_password);

答案 1

ResultSet.last()其他“绝对索引”查询操作仅在结果集可滚动时才可用;否则,只能逐个循环访问仅进站结果集。

下面的示例(来自 javadocs)演示如何创建可滚动 。ResultSet

Statement stmt = con.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY
);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");

请记住,使用可滚动查询会影响性能。如果此特定的目标只是获取其最后一个值,请考虑优化查询以仅返回该结果。ResultSet


答案 2
PreparedStatement ps = conn.prepareStatement ("SELECT * FROM
         EMPLOYEE_TABLE WHERE LASTNAME = ?" ,
         ResultSet.TYPE_SCROLL_INSENSITIVE , 
         ResultSet.CONCUR_UPDATABLE ,
         ResultSet.HOLD_CURSOR_OVER_COMMIT) ;

对于预准备语句,必须至少指定 和 工作的类型并发模式。last()isLast()


推荐