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();
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 + "%");
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 + "%'");
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.
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);
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
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