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

Как получить количество строк в JDBC?

Я выполнил запрос JDBC для получения набора результатов. Прежде чем перебирать его, я хотел бы быстро узнать, сколько строк было возвращено. Как я могу сделать это с высокой производительностью?

Я использую Java 6, Oracle 11g и новейшие драйверы Oracle JDBC.

4b9b3361

Ответ 1

Вам нужно будет сделать это как отдельный запрос, например:

SELECT COUNT(1) FROM table_name

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

Если вы делаете два отдельных запроса (один - счет, а другой - запрос), вам нужно будет сделать их в рамках одной транзакции. Это будет хорошо работать с Oracle, но может быть проблематичным для других баз данных (например, SQL Server либо покажет вам незафиксированные данные, либо блокирует внешнее незафиксированное обновление в зависимости от уровня изоляции, тогда как Oracle поддерживает уровень изоляции, который дает вам последовательный данные без блокировки внешних обновлений).

Обычно, хотя на самом деле не имеет значения, сколько строк есть. Обычно такой запрос обрабатывается или обрабатывается пакетно, и в любом случае у вас есть информация о ходе выполнения в виде строк, загруженных/обработанных, и вы можете обнаружить конец набора результатов (очевидно).

Ответ 2

Короткий ответ: вы не можете.

Длинный ответ: вы не можете, отчасти потому, что база данных может лениво оценивать запрос, возвращая только строки по мере их запроса.

EDIT: с помощью прокручиваемого ResultSet вы можете:)

В самом деле, я задал этот самый вопрос в новостной группе баз данных Java давным-давно (еще в 2001 году!) и имел некоторые полезные ответы.

Ответ 3

ResultSet rs = stmt.executeQuery(sql);
int rowCount = rs.last() ? rs.getRow() : 0; // Number of rows in result set. Don't forget to set cyrsor to beforeFirst() row! :)

Ответ 4

Чтобы получить количество строк из JDBC:

ResultSet rs = st.executeQuery("select count(*) from TABLE_NAME");
rs.next();
int count = rs.getInt(1);

Ответ 5

Если ваш драйвер поддерживает его (!), вы можете вызвать ResultSet.afterLast() ResultSet.getRow() ResultSet.beforeFirst(). Производительность может быть или не быть хороша.

Лучшим решением было бы переписать ваш алгоритм, чтобы не требовать размер спереди.

Ответ 6

код:

//Create a Statement class to execute the SQL statement
Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT COUNT(*) AS COUNT FROM
TABLENAME");

 while(rs.next()) {
    System.out.println("The count is " + rs.getInt("COUNT"));
 }

 //Closing the connection
 con.close();