Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать сколько в ResultSet строк, JDBC 
V
    Опции темы
sith
Дата 18.10.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



... подскажите пожалуйста как из полученного  ResultSet сразу получить колличество строк...

... проблема заключаеться в том что мне нужно передать полученные результаты  в Jtable... а значит нужен двумерный масив ... если я не знаю числа строк то немогу определить точный размер этого масива...


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
jer1
Дата 19.10.2007, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

Репутация: 4
Всего: 5



http://java.sun.com/javase/6/docs/api/java.../ResultSet.html
может так получится:
Код

    ResultSet rs = ...
    rs.last();
    rs.getRow(); // last row number

--------------------
:w!q
PM MAIL   Вверх
COVD
Дата 19.10.2007, 04:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



а зачем двумерный массив? Почему не сделать модель на основе ArrayList и не добавлять туда строки по мере их поступления до полного изнеможения?  
PM MAIL   Вверх
jsse
Дата 19.10.2007, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 1.5.2006
Где: Кривой Рог

Репутация: нет
Всего: 2



Еще проще - можно вектором
конструктор JTable(Vector rowData, Vector columnNames)
PM WWW Skype   Вверх
sith
Дата 19.10.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



... так по порядку...

jer1
Цитата(jer1 @  19.10.2007,  01:23 Найти цитируемый пост)
может так получится:код Java1:2:3:    ResultSet rs = ...    rs.last();    rs.getRow(); // last row number


пробывал... он у меня выдает такую красоту...
org.firebirdsql.jdbc.FBDriverNotCapableException: Not yet implemented.
        at org.firebirdsql.jdbc.FBStatementFetcher.last(FBStatementFetcher.java:163)
        at org.firebirdsql.jdbc.FBResultSet.last(FBResultSet.java:1273)
        at mailagent.Preference.<init>(Preference.java:47)
        at mailagent.Preference.getInstance(Preference.java:75)
        at mailagent.Main.main(Main.java:25)


...
COVD
Цитата(COVD @  19.10.2007,  04:42 Найти цитируемый пост)
а зачем двумерный массив? Почему не сделать модель на основе ArrayList и не добавлять туда строки по мере их поступления до полного изнеможения?  


... модель нужно писать свою...? просто наследую от AbstaractTableModel... делаю свой конструктор, и там уже разгребаю... этот  ArrayList? так что ли...

jsse

Цитата(jsse @  19.10.2007,  05:38 Найти цитируемый пост)
Еще проще - можно векторомконструктор JTable(Vector rowData, Vector columnNames)

... каким образом... какой алгоритм преоброзования результатов полученных из RusltSet  в Vector


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
jsse
Дата 19.10.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 1.5.2006
Где: Кривой Рог

Репутация: нет
Всего: 2



Что-то типа

Код

ResultSet rs ....
Vector<Vector> rows = new Vector<Vector>();
try {
    ResultSetMetaData rsmd = rs.getMetaData();

    while(rs.next()) {
        Vector<Object> row = new Vector<Object>();
        for(int i = 1; i <= rsmd.getColumnCount(); i++) {
            row.add(rs.getObject(rsmd.getColumnName(i)));
        }
        rows.add(row);
    }
} catch(SQLException ex) {
    System.out.println("ResultException: " + rs.toString());
}


Это сообщение отредактировал(а) jsse - 19.10.2007, 08:59
PM WWW Skype   Вверх
jer1
Дата 19.10.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

Репутация: 4
Всего: 5



Цитата(sith @ 19.10.2007,  08:38)

jer1
Цитата(jer1 @  19.10.2007,  01:23 Найти цитируемый пост)
может так получится:код Java1:2:3:    ResultSet rs = ...    rs.last();    rs.getRow(); // last row number


пробывал... он у меня выдает такую красоту...
org.firebirdsql.jdbc.FBDriverNotCapableException: Not yet implemented.
        at org.firebirdsql.jdbc.FBStatementFetcher.last(FBStatementFetcher.java:163)
        at org.firebirdsql.jdbc.FBResultSet.last(FBResultSet.java:1273)
        at mailagent.Preference.<init>(Preference.java:47)
        at mailagent.Preference.getInstance(Preference.java:75)
        at mailagent.Main.main(Main.java:25)

Тогда получай количество строк сам:
Код

select count(*) from yourTable

или так 
Код

select yourTable.*, (select count(*) rowCount from yourTable) from yourTable

вообщем, в таком духе
--------------------
:w!q
PM MAIL   Вверх
VSergeyV
Дата 19.10.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 299
Регистрация: 9.5.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Цитата(jer1 @  19.10.2007,  10:57 Найти цитируемый пост)
Тогда получай количество строк сам:


По первому варианту - а если строки количество строк изменится?;)


Цитата(jsse @  19.10.2007,  08:58 Найти цитируемый пост)
Что-то типа


я тоже бы делал на вектре, и длиной результ сета меня не интересовала)


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


Это сообщение отредактировал(а) VSergeyV - 20.10.2007, 17:31
PM MAIL ICQ   Вверх
COVD
Дата 19.10.2007, 15:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

а вообще как я понимаю все же узнать количество строк в полученном результ сете нельзя?


В общем случае нельзя. Когда вы даете запрос select, база данных находит строки в файле , читает их с диска и сразу отправляет их через сокетное соединение в резалтсет. Резалтсет - это буфер ( вектор или аррэйлист ) на стороне клиента. Сокет туда пишет строки, полученные из базы, а ваша программа их извлекает через next(). Чтобы заранее знать количество найденных записей, их надо все найти и загрузить в память. Это совершенно неприемлимо, если этих записей несколько миллионов. Можно использовать отдельный запрос, который считает записи.  
PM MAIL   Вверх
sith
Дата 19.10.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



... всем большой... сенкс... общую идею я понял...


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1034 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.