Java PreparedStatements中的通配符

时间:2008-11-29 17:52:06

标签: java mysql jdbc prepared-statement

这是我当前的SQL语句:

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

它会返回与专辑或艺术家名称的完全匹配,但不会返回任何其他内容。我不能在声明中使用'%',否则会出错。

如何将通配符添加到预准备语句中?

(我正在使用Java5和MySQL)

谢谢!

1 个答案:

答案 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("[", "![");
}