2008-11-29 34 views
8

這裏是我當前的SQL語句:通配符在Java中的PreparedStatement

SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;"; 

它返回精確匹配的專輯或藝術家姓名,但沒有別的。我無法在聲明中使用'%'或者出現錯誤。

如何在通配語句中添加通配符?

(我正在使用Java5和MySQL)

謝謝!

+0

這是[相同問題的更好的版本](http://stackoverflow.com/q/8247970/154527)。 – 2015-12-23 22:28:38

回答

18

您將%放入綁定變量中。所以你做

stmt.setString(1, "%" + likeSanitize(title) + "%"); 
    stmt.setString(2, "%" + likeSanitize(artist) + "%"); 

你應該加ESCAPE'!'允許您在輸入中轉義重要的特殊字符LIKE

使用冠軍藝術家你應該清理它們(如上圖所示),通過這樣的方法轉義特殊字符(!_,並[)之前:

public static String likeSanitize(String input) { 
    return input 
     .replace("!", "!!") 
     .replace("%", "!%") 
     .replace("_", "!_") 
     .replace("[", "!["); 
} 
+1

那麼,如果綁定變量實際上有一個'%'字符呢? – 2008-11-29 18:41:59