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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> посоветуйте, как сделать 
:(
    Опции темы
FullNub
Дата 15.1.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



имеется сервлет. он представляет собой форму с опциями поиска по БД oracle. запросы выполняются с помощью preparestatement. опций поиска довольно много. как сделать так, чтобы не пришлось перебирать каждый вариант запроса?
например
Код

               if(_lastName != "")
               {
                    _selectFirst += " AND LASTNAME = ?";
                    _command = _connection.prepareStatement(_selectFirst);
                    _command.setDate(1, _beginD);
                    _command.setDate(2, _endD);
                    _command.setString(3, _lastName);                    
               }
я хочу что нить типа 
               if(_lastName != "")
               {
                    _selectFirst += " AND LASTNAME = ?";
                    _command = _connection.prepareStatement(_selectFirst);
                    _command.setDate(1, _beginD);
                    _command.setDate(2, _endD);
                    _command.setString(3, _lastName);                    
               }
               else
              {
                    _selectFirst += " AND LASTNAME = ?";
                    _command = _connection.prepareStatement(_selectFirst);
                    _command.setDate(1, _beginD);
                    _command.setDate(2, _endD);
                    _command.setString(3, какой_то_символ_который_будет_обозначать_все_значения);                    
}


PM MAIL   Вверх
YuG
Дата 15.1.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не понятно.

Попробую ответить наугад:

Код

               if(_lastName == "") // но вот тут у тебя потенциальная ошибка ;-) 
                                               //Используй equals("") или == null
               {
                   _lastName = какой_то_символ_который_будет_обозначать_все_значения;
               }
               
               _selectFirst += " AND LASTNAME = ?";    
               _command = _connection.prepareStatement(_selectFirst);  
               _command.setDate(1, _beginD);   
               _command.setDate(2, _endD); 
               _command.setString(3, _lastName);                       

PM WWW ICQ Skype   Вверх
FullNub
Дата 15.1.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



дело в том, что при установке параметра в " AND LASTNAME = ?"; может быть два случая:
1) когда пользователь передал _lastName и тогда будет что то "and lastname = 'vasia'"
2) когда пользовател не передал _lastName, тогда в _command.setString(3, _lastName); вместо _lastName нужно укать то, что будет означать " and lastname = anyone", т.е. выбирать все записи.

вопрос заключает в том, что нужно запихнуть в _lastName во втором случае
PM MAIL   Вверх
BlackStar
Дата 15.1.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так если пользователь не передал _lastName, то тогда и не нужно добавлять в _selectFirst значение " AND LASTNAME = ?" и соответственно  _command.setString(3, _lastName) тоже не надо устанавливать.

Или я не правильно понял?
PM MAIL Jabber   Вверх
FullNub
Дата 15.1.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да. но так как опций поиска много, то при установке номеров параметров нужно узнавать, какие номера уже забиты. для этого нужно перебирать все варианты. извращаться с ифами, либо писать каку нить фишку. делать этого не хочется
PM MAIL   Вверх
batigoal
Дата 16.1.2007, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



1. Сделать в базе хранимую процедуру для поиска, в которой проверять переданные значения на NULL, и, в зависимости от результата, включать либо не включать поле в условие WHERE.
2. Использовать вместо проверки на равенство оператор LIKE. Тогда во втором случае _lastName будет равно %. Но работать LIKE будет медленнее, это надо учитывать.


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

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

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


 




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


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

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