2008-11-29 2 views
8

Вот мой текущий оператор SQL:Wildcards в Java PreparedStatements

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

Смежные вопросы