Uso del comodín "me gusta" en una declaración preparada

Resuelto ssn asked hace 13 años • 6 respuestas

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 LIKEpalabras clave, eso lo sé. Y también he usado declaraciones preparadas antes, pero no sé cómo usarlas LIKEporque 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();
ssn avatar Nov 24 '11 02:11 ssn
Aceptado

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 + "%");
BalusC avatar Nov 23 '2011 19:11 BalusC

Podemos utilizar la CONCATfunció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.

Basharat Ali avatar Nov 21 '2019 12:11 Basharat Ali