2015-10-01 41 views
1

我無法獲得正確的語法 - 我試圖在列上匹配空字符串,而不是null。我試過使用單引號分隔字符串的所有方法。在MySQL列中匹配空字符串而不是空值

containerRefNo = "\"\""; 

ps = getConnection().prepareStatement(
       "delete from inumber_join where container_no = ?"); 

我收到的錯誤是

您的SQL語法錯誤;檢查對應於您MariaDB的服務器版本使用附近的「從inumber_join其中container_no =‘‘’’」正確的語法手冊

+1

使用時你並不需要一個參數化查詢到包括*任何*分隔符的參數值。只需使用'ps.setString(1,「」);'對我來說工作得很好。 –

+0

同樣,即使需要傳遞引號,它也應該是單引號不加倍,所以:'containerRefNo =「''」;'這只是爲了澄清。 @GordThompson是完全正確的。 –

+0

@GordThompson你應該添加一個答案。 –

回答

1

當使用參數化查詢,你不需要包括任何分隔符在參數值中。只需使用ps.setString(1, "");適合我。

也就是說,...

// setup 
try (Statement st = conn.createStatement()) { 
    st.executeUpdate(
      "CREATE TEMPORARY TABLE inumber_join_temp (" + 
       "id INT AUTO_INCREMENT, " + 
       "container_no VARCHAR(10) NULL, " + 
       "PRIMARY KEY (id)" + 
      ")"); 
    st.executeUpdate(
      "INSERT INTO inumber_join_temp (container_no) " + 
       "VALUES (null), (''), (null), (''), (null)"); 
} 

// test 
String sql = 
     "SELECT COUNT(*) AS n " + 
     "FROM inumber_join_temp " + 
     "WHERE container_no = ?"; 
try (PreparedStatement ps = conn.prepareStatement(sql)) { 
    ps.setString(1, ""); // search for empty string 
    try (ResultSet rs = ps.executeQuery()) { 
     rs.next(); 
     System.out.println(rs.getInt(1)); 
    } 
} 

...返回

2 
+0

你說得很對,所以讓我把這個標記爲正確的。就我而言,原來問題出在我的查詢中的其他地方。我爲這篇文章做了一個簡單的例子,我收到的錯誤導致我瘋狂追逐。實際上,我從來沒有編碼字符串,它是從客戶端GUI發送的,只是一個空字符串。糾正我的查詢後,它一切正常。但是 - 真誠地感謝您發佈。我希望它也會幫助別人! –

相關問題