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

Получение количества строк в наборе результатов Java

Кто-нибудь знает лучший способ получить количество строк в наборе результатов Java, возвращенном из базы данных MySQL? Возвращенный результат не будет общим количеством строк, считанных из базы данных, поэтому я не думаю, что могу использовать функцию агрегации SQL COUNT.

public static int getResultSetRowCount(ResultSet resultSet) {
    int size = 0;
    try {
        resultSet.last();
        size = resultSet.getRow();
        resultSet.beforeFirst();
    }
    catch(Exception ex) {
        return 0;
    }
    return size;
}
4b9b3361

Ответ 1

Лучшим ответом является забыть о количестве строк, пока вы не загрузите ResultSet в объект или коллекцию. Вы можете сохранить количество строк с любой из этих опций.

Важно закрыть ResultSets (и все SQL-ресурсы, такие как Connection and Statement) в самом узком методе. Это означает, что вы не пропустите ResultSet из уровня сохранения. Лучше получить количество строк, используя вызов Collection size().

Прекратите думать о базах данных и начните думать об объектах. Java - объектно-ориентированный язык.

Ответ 2

Вы можете выполнить

SELECT FOUND_ROWS()

сразу после выполнения инструкции SELECT, чтобы найти количество строк.

Ответ 3

Вы всегда можете использовать SELECT COUNT() с теми же точными условиями, перед тем как сделать фактический SELECT.

Ответ 4

Вот мое решение этого вопроса (поскольку в основном я хочу, чтобы количество записей было возвращено для построения массива или что-то подобное): используйте коллекцию, такую ​​как Vector <T> вместо этого.

public Vector<T> getRecords(){
   Vector<T> records = new Vector<T>();
   init_conn_and_stmt_and_rs();

   try {
      rs = stmt.executeQuery("SELECT * FROM `table` WHERE `something` = 0");
      while(rs.next()){
         // Load the Vector here.
      }
   } catch (SQLException e) {
      e.printStackTrace();
   }finally{
      close_rs_and_stmt_and_conn();
   }
   return records;
}

Чисто и просто, нет? Работает для возвращаемого набора записей любого размера (не нужно знать размер перед рукой) и делает все доступные методы List доступными.

Это послужило мне на некоторое время, но если кто-то увидит недостаток в этом, пожалуйста, дайте мне знать. Всегда хочу, чтобы мои практики были лучше, я знаю.

Ответ 5

Если вы используете Java 6, вы можете использовать класс JDBC4ResultSet, который имеет метод getUpdateCount, который возвращает число строк, затронутых SQL-выражением, даже для инструкции Select.

Смотрите пример кода:

PreparedStatement ps = con.prepareStatement("select * from any_table ...");
JDBC4ResultSet rs = (JDBC4ResultSet)ps.executeQuery();
int rowNumber = rs.getUpdateCount();

Я надеюсь, что эта помощь!

Ответ 6

Вы также можете использовать следующий способ получения итоговых записей в наборе результатов:

statement = connect.createStatement();
resultSet = statement.executeQuery(sqlStatement);
resultSet.last();
int count = resultSet.getRow();
System.out.println(count);

count - это суммарные возвращаемые строки для вашего набора результатов.;)