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


Estoy usando instrucciones preparadas para ejecutar consultas de base de datos mysql. Y quiero implementar una funcionalidad de búsqueda basada en una palabra clave.

Para eso necesito usar la palabra clave LIKE, eso es lo que sé. Y también he usado declaraciones preparadas antes, pero no sé cómo usarlo con LIKE porque del siguiente código ¿dónde agregaría el 'keyword%'?

Puedo utilizar directamente en el pstmt.setString(1, notes) como (1, notes+"%") o algo así. Veo un montón de mensajes sobre esto en la web, pero no buena respuesta en cualquier lugar.

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
Author: ssn, 2011-11-23

5 answers

Debe configurarlo en el valor en sí, no en la cadena SQL de la instrucción preparada.

Por lo tanto, esto debería hacer 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 un sufijo-match:

pstmt.setString(1, "%" + notes);

O una coincidencia global:

pstmt.setString(1, "%" + notes + "%");
 221
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-23 22:23:11

Codifícalo así:

PreparedStatement pstmt = con.prepareStatement(
    "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes + "%");`

Asegúrese de que NO incluya las comillas '' como abajo, ya que causarán una excepción.

pstmt.setString(1,"'%"+ notes + "%'");
 20
Author: The Wedding Wolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 12:36:48
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + '%');

Prueba esto.

 3
Author: Faiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-10 18:01:21
String fname = "Sam\u0025";

PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? ");

ps.setString(1, fname);
 1
Author: Ram Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-13 16:15:50
String query="select * from test1 where "+selected+" like '%"+SelectedStr+"%';";


PreparedStatement preparedStatement=con.prepareStatement(query);


// where seleced and SelectedStr are String Variables in my program
 -1
Author: mahesh dhote,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-05 03:08:50