|
|
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Как все таки правильно это сделать, гугл подсказывает несколько приемов. Так какой из них правильный? Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:30:52 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Правильный это вызвать второй такоже запрос SELECT COUNT(...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:44:51 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПравильный это вызвать второй такоже запрос SELECT COUNT(...) это без шуток и смеха?если да , это это печально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:45:53 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
rsltr--как более правильнее подсчитать количество записей??Получить все и посчитать в цикле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:49:58 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovrsltr--как более правильнее подсчитать количество записей??Получить все и посчитать в цикле? Код: java 1. вот здесь хочу знать сколько строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:51:40 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПравильный это вызвать второй такоже запрос SELECT COUNT(...) +1 Количество записей, которое возвращает ResultSet, неизвестно до того момента пока ResultSet.next() не вернет false. Соответственно, либо гнать next() до конца, либо SELECT COUNT() ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:53:07 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
rsltrвот здесь хочу знать сколько строкКак вам уже сказали "скока точно строк" будет известно тогда, когда будет вычитан весь набор. "Считать в цикле", конечно, не надо :) Если вы хотите узнать сколько строк вернёт запрос, не выбирая строки на клиента, то ваш путь - групповая функция sum() и насилование сервера повторными запросами. Плюс, в многопользовательской среде, вариант с двумя запросами может давать погрешность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:57:27 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovвот здесь хочу знать сколько строкКак вам уже сказали "скока точно строк" будет известно тогда, когда будет вычитан весь набор. "Считать в цикле", конечно, не надо :) Если вы хотите узнать сколько строк вернёт запрос, не выбирая строки на клиента, то ваш путь - групповая функция sum() и насилование сервера повторными запросами.[/quot] ResultSet.last() можно ещё попробовать. Если там скролируемый курсор, тогда всё на клиента, возможно, и не вытянется. Basil A. SidorovПлюс, в многопользовательской среде, вариант с двумя запросами может давать погрешность. Даже в одной транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 18:21:29 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДаже в одной транзакции? угу. До второго запроса кто-то сделал коммит и Count изменится. Т.е. лучше записи не считать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 18:40:42 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
правильного нет. есть несколько способов: 1) уже описали: SELECT COUNT(*), но если долгого играющий запрос +и/или интенсивная модификация данных, следующий SELECT * может вернуть не то количество данных. лечится connection.setAutoCommit(false); + connection.setTransactionIsolation(java.sql.Connection.TRANSACTION_REPEATABLE_READ); или connection.setTransactionIsolation(java.sql.Connection.TRANSACTION_SERIALIZABLE); зависит от возможностей СУБД. 2) типа этого: java.sql.Statement statement = connection.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.CONCUR_READ_ONLY); java.sql.ResultSet resultSet = statement.executeQuery("..."); resultSet.last(); int size = resultSet.getRow(); resultSet.first(); 3)SELECT *, ROW_COUNT() OVER () AS "SIZE#" ... int size = resultSet.getInt("SIZE#"); зависит от возможностей СУБД, работает быстро. ..., а потом окажется, что записей более, чем 0x7fffffff :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 02:25:02 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Спасибо товарищи! жалко что нет единого решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 12:48:47 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovrsltr--как более правильнее подсчитать количество записей??Получить все и посчитать в цикле? Лучший способ! (без шуток, если автор темы не поймёт). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 12:56:50 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
rsltrBlazkowiczПравильный это вызвать второй такоже запрос SELECT COUNT(...) это без шуток и смеха?если да , это это печально Этот способ не годится никуда. Он тебе посчитает записи в одном наборе данных, а ты будешь потом получать уже ДРУГОЙ набор данных, там записей может быть уже другое количество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 12:57:46 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
MasterZivЛучший способ! (без шуток, если автор темы не поймёт). С фига ли. Обычно это нужно для задачи постраничного просмотра. Т.е. клиенту, чтобы узнать количество страниц нужно будет вычитать всю выборку? Офигенное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:06:08 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
MasterZivЭтот способ не годится никуда. Он тебе посчитает записи в одном наборе данных, а ты будешь потом получать уже ДРУГОЙ набор данных, там записей может быть уже другое количество. Зависит от задачи. Для постраничего просмотра - самое то. Для других задач, не особо представляю нафига count вообще нужен? Разве что оценить время обработки? Но его можно только "оценить", поэтому точное значение нафиг не упало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:07:29 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
rsltrСпасибо товарищи! жалко что нет единого решения для конкретной задачи, есть конкретное решение. Здесь нет конктретной задачи. Не ясно что за база, и для чего понадобилось количество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:08:18 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
rsltrСпасибо товарищи! жалко что нет единого решения на ещё http://www.codecodex.com/wiki/Count_the_number_of_rows_in_a_Oracle_database_table ... единого нет, т.к. нельзя узнать сколько хлеба в булочной не сходив в магазин. (не закачав всю БД на клиента) - Бери тогда какой-нить: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:20:11 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Я использовал такой код, и остался доволен: Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:26:07 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverЯ использовал такой код, и остался доволен: Код: java 1. 2. 3. конечно это лучше чем складывать переменную на счётах. Эта проблема должна решаться на уровне компонента Data\Row. Т.к. в одном потоке на этой строке Код: java 1. код встанет и будет висеть минуты 2. Кому что надо в итоге по БЛ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 13:31:33 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovrsltrвот здесь хочу знать сколько строкКак вам уже сказали "скока точно строк" будет известно тогда, когда будет вычитан весь набор. "Считать в цикле", конечно, не надо :) Если вы хотите узнать сколько строк вернёт запрос, не выбирая строки на клиента, то ваш путь - групповая функция sum() и насилование сервера повторными запросами. Плюс, в многопользовательской среде, вариант с двумя запросами может давать погрешность. Ребята, ещё раз -- это ОЧЕНЬ ПЛОХОЙ способ (хотя когда-то можно воспользоваться и им). Объясняю. Запрос каждый -- транзакция. Но ваша транзакция не единственная в БД, как правило, записи удаляются и добавляются, меняются. Запрос с COUNT(*) -- это одна транзакция, следующий уже на выборку -- это другая транзакция, кол-во записей может не совпадать. Используя предварительный запрос с COUNT(*) для подсчёта записей, ты заставляешь сервер выполнять один и тот же запрос два раза. Это может быть очень накладно, если запрос сложный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:18:36 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
BlazkowiczMasterZivЛучший способ! (без шуток, если автор темы не поймёт). С фига ли. Обычно это нужно для задачи постраничного просмотра. Т.е. клиенту, чтобы узнать количество страниц нужно будет вычитать всю выборку? Офигенное решение. ЛУЧШЕЕ решение. Вот совсем недавно мы выкинули у себя запрос с COUN(*) -ми и заменили его на просто выполнение запроса, одинарное. Время реакции на любой запрос уменьшилось вдвое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:21:34 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
MasterZiv, нету Лучшего без Цели (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:23:16 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
У некоторых серверов есть аналитические функции. Например Код: plsql 1. даст и строки и общее количество в колонке total_cnt. Естественно, последствия надо понимать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:26:11 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
MasterZivРебята, ещё раз -- это ОЧЕНЬ ПЛОХОЙ способ (хотя когда-то можно воспользоваться и им). А capital case типа должен придавать значимости фразе? Мы не знаем нужно ли там точное значение или нет. Оценить на сколько вариант плох без подробностей задачи невозможно. MasterZiv] Запрос каждый -- транзакция. Но ваша транзакция не единственная в БД, как правило, записи удаляются и добавляются, меняются. Запрос с COUNT(*) -- это одна транзакция, следующий уже на выборку -- это другая транзакция, кол-во записей может не совпадать. Это далеко не всегда ОЧЕНЬ ПЛОХО. Я даже придумать пример не могу почему это вдруг может оказаться ОЧЕНЬ ПЛОХО. MasterZivИспользуя предварительный запрос с COUNT(*) для подсчёта записей, ты заставляешь сервер выполнять один и тот же запрос два раза. Это может быть очень накладно, если запрос сложный. План построится один раз и по нему будет нормально фигарится сколько угодно. Да, немного медленее. Но в противном случае проще выкинуть подсчет количества вообще. О чем выше уже написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:56:23 |
|
||
|
ResultSet + rowCount
|
|||
|---|---|---|---|
|
#18+
MasterZivЛУЧШЕЕ решение. Вот совсем недавно мы выкинули у себя запрос с COUN(*) -ми и заменили его на просто выполнение запроса, одинарное. Время реакции на любой запрос уменьшилось вдвое. ЛУЧШЕЕ решение, конечно же, не считать вообще. Только автор темы об этом не спрашивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 14:57:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38159370&tid=2129933]: |
0ms |
get settings: |
17ms |
get forum list: |
19ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 305ms |
| total: | 471ms |

| 0 / 0 |
