2015-02-05 30 views
0

我正在開發一個數據庫搜索頁面(使用jsp),在這個搜索頁面中,用戶將有一個下拉列表形式的多個搜索條件/選項,那些選項可以保持未選中(換句話說,爲空),如果它們未被選中,則應該檢索完整的列。爲了實現這一點,我使用了ifnull()函數,並且我使用了MySQL。SQL IfNull()函數不識別空字符串

我面臨的問題是,SQL似乎無法識別字符串爲空,當空字符串在ifnull函數中傳遞時,它將檢索空值而不是檢索完整列。在查詢「ifnull(NULL,Location)」中直接傳遞NULL似乎工作得很好。

名單:

 <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

Sas的一些細節回答。在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); 
} 

順便說一句,java中的常見用法建議只有類名以大寫字母開頭,變量名應該以小寫字母開頭,所以NameVar應該是nameVar

0

嘗試:

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

嘗試設置null:

prepStmt.setNull(1, Types.VARCHAR)