Как в jdbc узнать количество записей возвращенных select-ом?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Как в jdbc узнать количество записей... Expand / Collapse
Автор
Сообщение
15.09.2006 11:55
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 28.12.2006 0:42
Сообщ.: 20, Visits: 79
Добрый день!
Выполняя executeQuery - получаем ResultSet.
И вот здесь можно как-нибудь, не перебирая весь цикл по while (rs.next())... - узнать количество возвращенных из базы строк?
Сообщ. #904414
15.09.2006 12:38
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Правильный ответ -- никак =)) И даже не пытайся. Проходили. Единственный вариант:
select count(*) from ...
Сообщ. #904417
15.09.2006 14:02
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 15.09.2006 14:01
Сообщ.: 1, Visits: 5
Это можно сделать. Для этого нужно установить курсор на последнюю строку (с помощью метода last()), а затем получить номер этой строки.
Например:


ResultSet rsTemp=rs;
ResultSetMetaData rsmd=rsTemp.getMetaData();
rsTemp.last();
int rowCount=rsTemp.getRow();


Работает, по-моему, только для JDBC 2.0 и выше.
Сообщ. #904425
15.09.2006 14:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Если я правильно ошибаюсь, то операция last() определена только для scrollable курсоров. Так что vovchik_s прав, но только для scrollable курсоров.
Сообщ. #904435
15.09.2006 15:47
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 10.03.2008 23:02
Сообщ.: 2 077, Visits: 21 402
Danissimo pravilno oshibaetsa:))))

Bez progonki cherez while kolichestvo ryadov ne uznatet
i odin while ne pomozhet. Obychno resultat zagonyatesa v kakoy-nibud Collection(Vector,ArrayList)
a potom delaetsa

int rowCount=vector.size()/resultSet.getMetaData() .getColumnCount();
Toka tak mozhno poluchit kolichestvo ryadov
Сообщ. #904440
15.09.2006 16:47
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
mishgun прав, говоря, что количество строк вычисляется

int rowCount=vector.size()/resultSet.getMetaData() .getColumnCount();

но только, если каждая колонка каждой строки вписывается в vector как отдельный элемент.
Сообщ. #904448
15.09.2006 16:47
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.02.2008 19:48
Сообщ.: 480, Visits: 5 178
Дело, видимо, в том, что данные в резалтсет могут пересылаться из базы данных порциями, по мере спроса. Поэтому резалтсет и не может знать заранее количество записей в общем случае. 
Сообщ. #904449
15.09.2006 16:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2007 20:20
Сообщ.: 662, Visits: 5 795
Свершенно верно, mselez =)
Сообщ. #904450
15.09.2006 17:01