2015-02-05 2 views
0

Я разрабатываю страницу поиска базы данных (используя jsp), на этой странице поиска пользователи будут иметь несколько условий/параметров поиска в виде раскрывающегося списка, те параметры могут быть оставлены невыбранными (ноль другими словами), если они оставлены невыбранными, следует получить полный столбец. Для этого я использую функцию ifnull(), и я использую MySQL.SQL Функция IfNull() не распознает нулевые строки

Проблема, с которой я столкнулся, заключается в том, что SQL не может распознать, что строка равна null, когда пустая строка передается в функции ifnull, она извлекает нулевые значения вместо получения полного столбца. Передача NULL непосредственно в запросе «ifnull (NULL, Location)», похоже, работает нормально.

Список:

 <select name="EX"> 
      <option value="NULL">Any</option> 
      <option value="1">Option1</option> 
      <option value="2">Option2</option> 
      <option value="3">Option3</option> 
     </select> 

Как значения обрабатываются на следующей странице:

String NameVar = new String(); 
if(request.getParameter("EX") == "NULL"){ 
NameVar = null; 
} 
else if(request.getParameter("EX") != "NULL"){ 
NameVar = request.getParameter("EX"); 
} 

Мой запрос:

selectItem = connection.prepareStatement("SELECT Location, ItemType " 
       + "FROM DBTEST " 
       + "WHERE Location = IFNULL(?,Location)" 

ответ

0

Некоторые подробности о Сас ответ. В SQL значение null является специальным значением, и никакая int или ни одна строка не может быть равна NULL.

В запросе вы должны использовать специальную конструкцию IS NULL для проверки нулевых значений, потому что column = NULL никогда не будет правдой.

При использовании домашних переменных, вы должны явно установить их на NULL с помощью метода setNull

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

selectItem = connection.prepareStatement("SELECT Location, ItemType " 
      + "FROM DBTEST " 
      + "WHERE Location = IFNULL(?,Location)"); 
if (NameVar == null) { 
    selectItem.setNull(1, Types.VARCHAR); 
} 
else { 
    selectItem.setString(1, NameVar); 
} 

BTW, общие обычаи в java рекомендуют, чтобы только имена классов начинались с прописных букв, имена переменных должны начинаться с строчной буквы, поэтому NameVar должно быть nameVar

0

Try:

String sql = "SELECT Location, ItemType " 
+ "FROM DBTEST " 
+ "WHERE Location = IFNULL(?,Location)"; 
PreparedStatement prepStat = connection.prepareStatement(sql); 
prepStat.setString(1, NameVar); 
0

Try набор нуль:

prepStmt.setNull(1, Types.VARCHAR) 
Смежные вопросы