Подтвердить что ты не робот

Rs.last() дает недопустимую операцию только для форматирования только результатов: last

Я пытаюсь получить количество строк в результирующем наборе:

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

но im получает ошибку Invalid operation for forward only resultset : last. Набор результатов получает данные из базы данных Oracle 10g.

Вот как я установил мое соединение:

    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);
4b9b3361

Ответ 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 ps3 = conn.prepareStatement("SELECT * FROM
         EMPLOYEE_TABLE WHERE LASTNAME = ?",
         ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE,
         ResultSet.HOLD_CURSOR_OVER_COMMIT);

Для подготовленных операторов вы должны указать, как минимум, режим типа и concurrency для last() и isLast() для работы.

Ответ 3

Благодаря cheeken (2 сообщение выше), но в Java 1.8 функция createStatement() теперь нуждается в 2 параметрах

Пример:

stmt 
  = conx.createStatement
      (ResultSet.TYPE_SCROLL_INSENSITIVE
      ,ResultSet.CONCUR_READ_ONLY
      );