Uso del comodín "me gusta" en una declaración preparada
Estoy usando declaraciones preparadas para ejecutar consultas de bases de datos MySQL. Y quiero implementar una función de búsqueda basada en una especie de palabra clave.
Para eso necesito usar LIKE
palabras clave, eso lo sé. Y también he usado declaraciones preparadas antes, pero no sé cómo usarlas LIKE
porque desde el siguiente código, ¿dónde agregaría 'keyword%'
?
¿Puedo usarlo directamente en el pstmt.setString(1, notes)
as (1, notes+"%")
o algo así? Veo muchas publicaciones sobre esto en la web pero no hay una buena respuesta en ninguna parte.
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
Debe establecerlo en el valor en sí, no en la cadena SQL de la declaración preparada.
Entonces, esto debería funcionar para una coincidencia de prefijo:
notes = notes
.replace("!", "!!")
.replace("%", "!%")
.replace("_", "!_")
.replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");
o una coincidencia de sufijo:
pstmt.setString(1, "%" + notes);
o una coincidencia global:
pstmt.setString(1, "%" + notes + "%");
Podemos utilizar la CONCAT
función SQL.
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes like CONCAT( '%',?,'%')";
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
Esto funciona perfectamente para mi caso.