Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Error en consulta SQL

Hola, mi problema es el siguiente, quiero que la consulta me devuelva todo los registros que contengan una palabra o letra que le pasamos.
El programa me falla cuando hace la consulta, justo en este punto:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url);

PreparedStatement ps=conn.prepareStatement("SELECT * FROM articulos
WHERE descripcion like '%?%'");

ps.setString(1, texto); // es la variable que le pasamos como parametro
// desde un JTextField
result=ps.executeQuery();

El error que me da al ejecutar es este:

Parameter index out of range (1 > number of parameters, which is 0)

julio 4, 2014 | Registered Commenterjorgenaron

No puedes incluir un %?% en el preparedStatement, porque entonces buscaría las coincidencias del carácter ? en el contenido de la columna, y no lo interpreta como wildcard. De ahí la excepción.

PreparedStatement ps=conn.prepareStatement("SELECT * FROM articulos
WHERE descripcion like ?");

ps.setString(1, %+texto+%); // es la variable que le pasamos como parametro

julio 4, 2014 | Registered Commenterchoces

Hay un problema no permite usar esta expresion %+texto+%, da error.

julio 4, 2014 | Registered Commenterjorgenaron

Debería ser así: "%"+texto+"%"
Con las prisas no puse las comillas. De todos modos, el procedimiento estaba claro, y el error del compilador creo que era fácil de detectar.

julio 4, 2014 | Registered Commenterchoces

No si asi ya probe y nada. Da este error

Before start of result set

julio 4, 2014 | Registered Commenterjorgenaron

Ya esta solucionado, por arte de magia funciono ahora.

Muchas gracias por tu ayuda.
Saludos

julio 4, 2014 | Registered Commenterjorgenaron

¿Por arte de magia? :D

"Before start of result set" no es un error, es un trozo incompleto de un stacktrace.
A ver si sale ya la actualización 20 de JavaSE 1.8, para poner más al día mi bola de cristal.

julio 5, 2014 | Registered Commenterchoces