Подстановочные знаки в Java PreparedStatements - PullRequest
8 голосов
/ 29 ноября 2008

Вот мой текущий оператор SQL:

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

Он возвращает точные совпадения с именами альбомов или исполнителей, но не с чем-либо еще. Я не могу использовать «%» в выражении, или я получаю ошибки.

Как добавить символы подстановки в подготовленное утверждение?

(я использую Java5 и MySQL)

Спасибо!

1 Ответ

18 голосов
/ 29 ноября 2008

Вы помещаете% в связанную переменную. Итак, вы делаете

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

Вы должны добавить ESCAPE '!' , чтобы позволить вам экранировать специальные символы, которые имеют значение для LIKE при вводе.

Перед использованием title или artist необходимо очистить их (как показано выше), экранируя специальные символы (! , % , _ и [) с помощью такого метода:

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