entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Doble consulta SQL utilizando LIKE

Presento inconveniente al realizar una doble consulta con la instruccion LIKE en SQL, quiero realizar la
busqueda a la base de datos mediante nom_producto y idproducto, en este caso la busqueda la hago
con nom_producto y se efectua de manera correcta, quiero algo como asi:

SELECT * FROM producto WHERE nom_producto LIKE ? AND idproducto LIKE ?
En este caso aparece el siguiente error:

Img_Errror

private void txfSearchKeyReleased(java.awt.event.KeyEvent evt) {                                      
           String sql = "SELECT * FROM producto WHERE nom_producto LIKE ?";

        try{
           pst = conn.prepareStatement(sql);
           pst.setString(1, txfSearch.getText()+"%");
           rst = pst.executeQuery();
           tablaproductos.setModel(DbUtils.resultSetToTableModel(rst));

        }
        catch(Exception e){
          JOptionPane.showMessageDialog(null, e);
        }
    } 

magarzon comentado Oct 13

Dinos cómo es el código que te da error, porque el que has puesto es el de la primera consulta que sí te funciona.

Bclatino comentado Oct 13

@magarzon El codigo del error es el siguiente:

java.SQLException: No value specified for parameter 2

magarzon comentado Oct 13

No, no, me refiero a qué código tuyo genera ese mensaje de error.

Bclatino comentado Oct 13

@magarzon El codigo que genera el error es este:

SELECT * FROM producto WHERE nom_producto LIKE ? AND idproducto LIKE ?

magarzon comentado Oct 13

Pero ese es el código SQL, por sí solo no genera ningún error. Pon el código Java que utilizas para ejecutar este SQL. Si me dices que es el mismo, ahí tienes el error, porque en el código que pusiste en principio solo estás estableciendo el valor de un parámetro (un ?), no de los dos

Bclatino comentado Oct 13

Este es el código que genera el error, estoy haciendo la consulta utilizando los dos LIKE, es decir
para que la consulta se realice mediante el nombre del producto y del id del producto.
Lo que quiero con todo esto es que pueda buscar por esos dos campos, a medida que escriba en el jTextFiedl(txtSearch), busque las coincidencias en la tabla y esta vaya reduciendo su contenido mostrando las coincidencias escritas en el campo de texto.

private void txfSearchKeyReleased(java.awt.event.KeyEvent evt) {                                      
           String sql = "SELECT * FROM producto WHERE nom_producto LIKE ? AND idproducto LIKE ?";

        try{
           pst = conn.prepareStatement(sql);
           pst.setString(1, txfSearch.getText()+"%");
           rst = pst.executeQuery();
           tablaproductos.setModel(DbUtils.resultSetToTableModel(rst));

        }
        catch(Exception e){
          JOptionPane.showMessageDialog(null, e);
        }
    }

Este es el código que No genera errores, pero solo estoy haciendo la consulta mediante el nombre del producto:

private void txfSearchKeyReleased(java.awt.event.KeyEvent evt) {                                      
           String sql = "SELECT * FROM producto WHERE nom_producto LIKE ?";

        try{
           pst = conn.prepareStatement(sql);
           pst.setString(1, txfSearch.getText()+"%");
           rst = pst.executeQuery();
           tablaproductos.setModel(DbUtils.resultSetToTableModel(rst));

        }
        catch(Exception e){
          JOptionPane.showMessageDialog(null, e);
        }
    } 

1 Respuesta

1voto

magarzon Puntos22080

Ok, prueba esto:

private void txfSearchKeyReleased(java.awt.event.KeyEvent evt) {                                      
           String sql = "SELECT * FROM producto WHERE nom_producto LIKE ? AND idproducto LIKE ?";

        try{
           pst = conn.prepareStatement(sql);
           pst.setString(1, txfSearch.getText()+"%");
           pst.setString(2, txfSearch.getText()+"%");
           rst = pst.executeQuery();
           tablaproductos.setModel(DbUtils.resultSetToTableModel(rst));

        }
        catch(Exception e){
          JOptionPane.showMessageDialog(null, e);
        }
    }

Bclatino comentado Oct 13

@magarzon Ya había probado ese código, el error desaparece pero la consulta se va en blanco, es decir al realizar la búsqueda por alguno de los dos campos la tabla queda en blanco, no muestra ningún registro obviamente que coincida con lo que estoy consultando.

magarzon comentado Oct 13

Usa un OR:

SELECT * FROM producto WHERE nom_producto LIKE ? OR idproducto LIKE ?

Bclatino comentado Oct 13

@magarzon Efectivamente, esta ultima instrucción soluciono el problema.

Gracias

Peter comentado Oct 13

@Bclatino por favor selecciona la respuesta como correcta.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta