Получение количества строк в наборе результатов Java - PullRequest
26 голосов
/ 16 июня 2010

Кто-нибудь знает лучший способ получить количество строк в наборе результатов 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;
}

Ответы [ 7 ]

21 голосов
/ 16 июня 2010

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

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

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

9 голосов
/ 16 июня 2010

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

SELECT FOUND_ROWS()

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

2 голосов
/ 26 июля 2012

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

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.

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

2 голосов
/ 25 июля 2012

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

См. Ниже пример кода:

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

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

2 голосов
/ 16 июня 2010

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

1 голос
/ 28 сентября 2013

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

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

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

0 голосов
/ 08 февраля 2018

См. Ниже пример кода с решением Лалита:

public static int getResultSetRowCount(connection) {
    int size = 0; 
    statement = connection.createStatement(); 
    try {
        resultSet = statement.executeQuery("SELECT FOUND_ROWS()")
        resultSet.next()
        size = resultSet.getInt(1)
    }
    catch(Exception ex) {
        return 0;
    }
    statement.close();
    return size;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...