Wildcards em PreparedStatements Java
-
11-07-2019 - |
Pergunta
Aqui está a minha atual instrução SQL:
SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;";
Ele está retornando correspondências exatas para os nomes de álbum ou artista, mas não qualquer outra coisa. Eu não posso usar um '%' na declaração ou recebo erros.
Como posso adicionar curingas para uma declaração preparada?
(estou usando Java5 e MySQL)
Obrigado!
Solução
Você colocar o% na variável ligada. Então você faz
stmt.setString(1, "%" + likeSanitize(title) + "%");
stmt.setString(2, "%" + likeSanitize(artist) + "%");
Você deve adicionar ESCAPE '!' para que você possa escapar caracteres especiais que importa para COMO em que você insere.
Antes de usar título ou artista ??strong> você deve higienizar-los (como mostrado acima) por escapar caracteres especiais (! , % , _ e [) com um método como este:
public static String likeSanitize(String input) {
return input
.replace("!", "!!")
.replace("%", "!%")
.replace("_", "!_")
.replace("[", "![");
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow