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!

Foi útil?

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 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
scroll top