Получение количества строк в наборе результатов 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;
}
Ответы
Ответ 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 - это суммарные возвращаемые строки для вашего набора результатов.;)