preparestatement - preparedstatement java select
Usar el comodÃn "me gusta" en la declaración preparada (4)
Estoy usando declaraciones preparadas para ejecutar consultas de bases de datos mysql. Y quiero implementar una funcionalidad de búsqueda basada en una palabra clave de tipo.
Para eso necesito usar la palabra clave LIKE
, eso sí que sé. Y también he usado declaraciones preparadas antes, pero no sé cómo usarlas con LIKE
porque a partir del siguiente código, ¿dónde agregaría la ''keyword%''
?
¿Puedo usarlo directamente en pstmt.setString(1, notes)
como (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();
Codifíquelo así:
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes + "%");`
Asegúrese de NO incluir las comillas '''' como a continuación, ya que causarán una excepción.
pstmt.setString(1,"''%"+ notes + "%''");
Debe configurarlo en el valor en sí, no en la cadena SQL de sentencia preparada.
Entonces, esto debería servir para un prefijo-partido:
notes = notes
.replace("!", "!!")
.replace("%", "!%")
.replace("_", "!_")
.replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes LIKE ? ESCAPE ''!''");
pstmt.setString(1, notes + "%");
o un sufijo-partido:
pstmt.setString(1, "%" + notes);
o una coincidencia global:
pstmt.setString(1, "%" + notes + "%");
String fname = "Sam / u0025"; PreparedStatement ps = conn.prepareStatement ("SELECT * FROM Users WHERE User_FirstName LIKE?"); ps.setString (1, fname);
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + ''%'');
Probar esto.