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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как определить количество строк в таблице MYSql 
V
    Опции темы
clamp
Дата 1.9.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 10.6.2008
Где: Планета Земля

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



Добрый день. Подключился к БД все работает, но теперь возникает такая ситуация, некоторые таблицы не содержат данные. 
Вопрос: Как определить колицество строк в таблице.
вот код коннекта

Код



            String sql="SELECT *FROM `tbl` where at='for'";
            
            String userName="ad";
            String password="ad";

            String url = "jdbc:mysql://ip/at?character_set_results=utf8";
    
            Connection con =null;
            Statement stmt=null;
            ResultSet rs=null;
            ResultSetMetaData rsm=null;
            SQLWarning warn;
            String back_up;
            int colum,colum_Stolbcov;
            DatabaseMetaData metaData=null;
    
        
            
            try {
                
                
                con = (Connection) DriverManager.getConnection(url,userName,password);
                
                stmt= (Statement) con.createStatement();
                rs=stmt.executeQuery(sql);
                rsm = rs.getMetaData();
                colum = rsm.getColumnCount();
                                
                
            
                metaData=con.getMetaData();
                System.out.println(metaData.getDatabaseProductName());
    
                
                
                while (rs.next()){
                    System.out.println("+---------------------");
                    for (int i=1; i<=colum;i++){
                        back_up=rs.getString(i);
                    System.out.print(back_up+" ");
                    }
                    System.out.println(" ");
                    System.out.println("+---------------------");
                }

 
PM WWW ICQ   Вверх
LSD
Дата 1.9.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(clamp @  1.9.2009,  12:21 Найти цитируемый пост)
Вопрос: Как определить колицество строк в таблице.

Код

select count(*) from tbl_name


P.S. Всю жизнь думал, что на конце вопроса ставится знак вопроса  smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
clamp
Дата 1.9.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 10.6.2008
Где: Планета Земля

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



Цитата
P.S. Всю жизнь думал, что на конце вопроса ставится знак вопроса   




Я нохожусь не на форуме русского языка  smile 

сорри что сразу не уточнил sql ом я знаю как определить колицество строк. 
Заача немного не так стоит 
Сперва я делаю запрос  
Код

String sql="SELECT *FROM `tbl` where at='for'"; 


как мне именно в ответе узнать сколько строк ? или как определить если значения пустые то вывести что таблица пустая ?????? ))))))
 
Код
 
rs=stmt.executeQuery(sql);
rsm = rs.getMetaData();


PM WWW ICQ   Вверх
lBugl
Дата 1.9.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



можно попробовать так:
Код

rs = stmt.executeQuery(sql);

if( resultSet.last() ) {
  System.out.println( resultSet.getRow() );
  resultSet.beforeFirst();
}

PM MAIL   Вверх
Ипатьев
Дата 1.9.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



количество строк - такая же информация, как и любая другая.
и получать ее точно так же, как любую другую, которую вернул запрос.

Цитата(clamp @  1.9.2009,  12:51 Найти цитируемый пост)
Я нохожусь не на форуме русского языка

а жаль
PM MAIL   Вверх
LSD
Дата 1.9.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(lBugl @  1.9.2009,  13:56 Найти цитируемый пост)
можно попробовать так:

Так лучше не делать, т.к. зачастую курсоры бывают однонаправленные и beforeFirst() просто выкинет ошибку.



Цитата(clamp @  1.9.2009,  12:51 Найти цитируемый пост)
как мне именно в ответе узнать сколько строк ? или как определить если значения пустые то вывести что таблица пустая ?????? ))))))

Попытаться проитерироваться по ResultSet-у.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
clamp
Дата 2.9.2009, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 10.6.2008
Где: Планета Земля

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



Ипатьев,  Можно поподробнее. 



Вообщем свою задачу решил топорным методом, но не уверен, что это правильно. Вообщем вот так:

Код


if (rs.nex()==false){
  System.out.println("Нет данных");

}

else {
rs.beforeFirst();
.
.
код для обработки данных
.
.

}

[/code]


Это сообщение отредактировал(а) clamp - 2.9.2009, 06:08
PM WWW ICQ   Вверх
Старовъръ
Дата 2.9.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да ответили же: 
Код

String sql = "select count(*) as count from someTable";
...
rs.getInt("count");
PS: будешь неграмотно писать, меньшее количество людей захочет тебе помогать и большее количество будешь раздражать. Я знаю многих, кто даже не заходит в темы, названия которых написаны неграмотно.
PM MAIL WWW   Вверх
lBugl
Дата 2.9.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(clamp @ 2.9.2009,  06:07)

Вообщем свою задачу решил топорным методом, но не уверен, что это правильно. Вообщем вот так:

Код

if (rs.nex()==false){
  System.out.println("Нет данных");

}

else {
rs.beforeFirst();
.
.
код для обработки данных
.
.

}


странно... вначале требовалось определить количество возвращаемых записей, теперь, походу, просто узнать есть ли они...
судя по последнему твоему коду и прислушавшись к тому, что сказали лучше не использовать  rs.beforeFirst();
я бы сделал так:
Код

if (rs.next()==false){
  System.out.println("Нет данных");
}else{
  do{
     //обработка данных
  }while(rs.next());
}

PM MAIL   Вверх
grimmy
Дата 2.9.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм... Я конечно могу и чушь спороть, но все же smile
Если таблицы не большие, то можно пройтись в цикле по результату, сохранить каждую строку в обьекте, и загнать все обьекты в вектор. А там уже vector.getSize() будет. Да и вобще с вектором имхо работать поудобнее. В идеале можно вынести обработку запроса в отдельный класс, сделать два метода getResultSet() и getResultVector(), и выбирать что-то одно по мере надобности.
PM MAIL   Вверх
Ипатьев
Дата 2.9.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



да, это чушь.
это имеет смысл только в том случае, если нам нужно не только количество, но и результат. но даже для этого случая не надо никуда ходить в цикле - api предоставляет информацию о количестве возвращенных строк.
если же задача - получить количество строк в какой-либо выборке, но не её саму, то ходить кругами по результату становится совсем бессмысленным занятием. если можно получить нужную цифру одним запросом и потом положить хоть в вектор, хоть в матрицу, хоть в пифагоровы штаны.
PM MAIL   Вверх
LSD
Дата 2.9.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Ипатьев @  2.9.2009,  13:36 Найти цитируемый пост)
да, это чушь.

Это хорошая мысль, вначале поста писать его краткое содержание.



Цитата(Ипатьев @  2.9.2009,  13:36 Найти цитируемый пост)
это имеет смысл только в том случае, если нам нужно не только количество, но и результат. но даже для этого случая не надо никуда ходить в цикле - api предоставляет информацию о количестве возвращенных строк.

И какой же метод позволяет узнать количество строк в ResultSet?




M
LSD
Ипатьев, мне надоели твои беспочвенные наезды и флейм не по теме. Если ты продолжишь учить всех как им надо жить, писать код, одеваться и т.п., отправишься в баню. Если есть что сказать по делу (с примерами кода, ссылками на документацию и т.д.), то пиши иначе иди лучше в песочницу.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
cube
Дата 2.9.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LSD @ 2.9.2009,  22:57)
И какой же метод позволяет узнать количество строк в ResultSet?

Код


     ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
     ResultSetMetaData rsmd = rs.getMetaData();
     int numberOfColumns = rsmd.getColumnCount();



сорри уже путаю столбцы и строки, но решения два одно банальное отправить запрос count, и второе ввести переменную ++count;

есть еще масса примеров я не вижу здесь проблемы, автор и сам мог бы поискать, не забываем методы:

Код

isAfterLast()
last();
getRow();


Лично сам советую закрыть тему и использовать запрос count, а так это твое дело хочешь загоняй результат в вектор в массив используй метод size или length...но опять же не вижу в этом смысла если есть count

Это сообщение отредактировал(а) cube - 2.9.2009, 23:41
PM MAIL   Вверх
Ипатьев
Дата 3.9.2009, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(LSD @  2.9.2009,  22:57 Найти цитируемый пост)
Это хорошая мысль, вначале поста писать его краткое содержание.

да, я тоже думаю, что это
Цитата(LSD @  2.9.2009,  22:57 Найти цитируемый пост)
беспочвенные наезды и флейм не по теме.


В общем, вы соединенными усилиями написали по делу с примерами кода решение задачи для случая, когда
Цитата(grimmy @  2.9.2009,  12:07 Найти цитируемый пост)
Если таблицы небольшие


теперь осталось найти решение для случая, когда копировать всю базу в память виртуальной машины нецелесообразно %)



PM MAIL   Вверх
clamp
Дата 3.9.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 10.6.2008
Где: Планета Земля

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



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

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

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


 




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


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

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