Генерация динамического SQL-оператора SELECT - PullRequest
1 голос
/ 19 апреля 2011

У меня возникли небольшие проблемы при попытке динамически сгенерировать оператор SQL SELECT, сгенерированный из записи с веб-страницы.По сути, у меня есть небольшая поисковая система на сайте, она принимает три параметра (цена, город, бренд), поэтому у меня есть JavaBean, построенный таким же образом, только с 3 атрибутами, одинаковыми.При выполнении SELECT для базы данных я мог бы сделать это, используя PreparedStatement

String sql=select * from product where price<=? and city=? and brand=?;
prep=conn.prepareStatement(sql);
prep.setDouble(1,price);
prep.setString(2,city);
prep.setString(3,brand);

, где prep, конечно, является PreparedStatement obj. Моя проблема возникает, когда пользователь не вставляет параметр в поле веб-страницыпотому что, видимо, он не заинтересован в ограничении.Мне нужно найти способ «вырезать» запись во время выполнения, например:

city field = ""?затем вычеркните город из критериев поиска:

String sql=select * from product where price<=? and brand=?;

Один из способов, которым я мог бы это сделать, - это заполнить код в сервлете командой else-if, но я уверен, что это не единственное решение.Другим потенциальным решением было бы использование IFNULL (expr1, expr2) функции SQL, но в случае нулевого значения я должен просто удалить нулевое поле из запроса.

У вас есть какой-нибудь совет?

Надеюсь, это достаточно ясно, как я это объяснил.

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

Вы можете использовать OR в вашем предложении WHERE, чтобы сделать что-то вроде:

WHERE (Price<=? OR ? IS NULL)
AND   (City = ? OR ? IS NULL)
AND   (Brand = ? OR ? IS NULL)
0 голосов
/ 19 апреля 2011

Попробуйте заменить условие "=" на Like "% [input_value]% '. Таким образом, если вы оставите пустое поле, у вас нет никаких ограничений.

0 голосов
/ 19 апреля 2011

Вы можете использовать like для строк.

String sql = "SELECT * FROM product WHERE price <= ? AND city like '?' AND brand like '?'";
prep = conn.prepareStatement(sql);
prep.setDouble(1, price);
prep.setString(2, city);
prep.setString(3, brand);

См. Точное совпадение с sql и привязкой

А если город / бренд не выбран, то установите его

prep.setString(2, "%");
prep.setString(3, "%");

Если цена не выбрана, используйте очень большое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...