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);
        }
    } 

1voto

magarzon comentado

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.

0voto

Bclatino comentado

@magarzon El codigo del error es el siguiente:

java.SQLException: No value specified for parameter 2

1voto

magarzon comentado

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

0voto

Bclatino comentado

@magarzon El codigo que genera el error es este:

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

0voto

magarzon comentado

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

0voto

Bclatino comentado

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 Puntos30650

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);
        }
    }

0voto

Bclatino comentado

@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.

3votos

magarzon comentado

Usa un OR:

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

1voto

Bclatino comentado

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

Gracias

0voto

Peter comentado

@Bclatino por favor selecciona la respuesta como correcta.

Saludos.

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

Otras Preguntas y Respuestas


...

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

Conecta