这是我当前的SQL语句:
SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;";
它会返回与专辑或艺术家名称的完全匹配,但不会返回任何其他内容。我不能在声明中使用'%',否则会出错。
如何将通配符添加到预准备语句中?
(我正在使用Java5和MySQL)
谢谢!
答案 0 :(得分:18)
您将%放入绑定变量中。所以你做了
stmt.setString(1, "%" + likeSanitize(title) + "%");
stmt.setString(2, "%" + likeSanitize(artist) + "%");
您应该添加 ESCAPE'!',以便在输入中转义与 LIKE 无关的特殊字符。
在使用标题或艺术家之前,您应该通过转义特殊字符(!,%<来清理它们(如上所示) / strong>, _ 和 [)使用如下方法:
public static String likeSanitize(String input) {
return input
.replace("!", "!!")
.replace("%", "!%")
.replace("_", "!_")
.replace("[", "![");
}