Buscar información en una base de datos y mostrarla en una tabla de tu formulario

Pool metodospool = new Pool();
DefaultTableModel ModeloTabla;
   

public void Buscar(String valor, String filtro, JTable tablacontactos){

    String [] columnas={"ID","Nombres","Apellidos","Email","Celular", "Dirección", "Ciudad"};
    String [] registro=new String[7];
    ModeloTabla=new DefaultTableModel(null,columnas);
    String SSQL;
    Connection conect = null;

 
    if(filtro.equals("Apellidos")){
   
        SSQL= "SELECT id_contacto, nombres, apellidos, email, celular, direccion, ciudad "
              + "FROM contacto WHERE apellidos LIKE '%"+valor+"%'";
       
    }else if(filtro.equals("Email")){
   
        SSQL= "SELECT id_contacto, nombres, apellidos, email, celular, direccion, ciudad "
              + "FROM contacto WHERE email LIKE '%"+valor+"%'";
   
    }else{
   
        SSQL= "SELECT id_contacto, nombres, apellidos, email, celular, direccion, ciudad "
              + "FROM contacto WHERE celular LIKE '%"+valor+"%'";
   
    }
   
           
     
    try {

        conect = metodospool.dataSource.getConnection();
        PreparedStatement st = conect.prepareStatement(SSQL);
        ResultSet rs = st.executeQuery();

        while (rs.next()){
         
            registro[0]=rs.getString("id_contacto");
            registro[1]=rs.getString("nombres");
            registro[2]=rs.getString("apellidos");
            registro[3]=rs.getString("email");
            registro[4]=rs.getString("celular");
            registro[5]=rs.getString("direccion");
            registro[6]=rs.getString("ciudad");
         
            ModeloTabla.addRow(registro);
           
        }
       
        tablacontactos.setModel(ModeloTabla);

    } catch (SQLException e) {

        JOptionPane.showMessageDialog(null, e, "Error durante el procedimiento", JOptionPane.ERROR_MESSAGE);
   
    }finally{

        if(conect!=null){
       
            try {

                conect.close();

            } catch (SQLException ex) {

                JOptionPane.showMessageDialog(null, ex, "Error de desconexión", JOptionPane.ERROR_MESSAGE);

            }
       
        }
       
    }

}

Si deseas ver la explicación detallada de cada sección del código anterior, puedes dirigirte a:
http://codigosparadesarrolladores.blogspot.com/2015/03/codigo-java-consu...

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

QUE NOOOOOOOOOOOO

No me canso de repetirlo, porque NO SE CANSAN DE SEGUIR COMETIENDO EL MISMO ERROR!!!!

No concatenen los parámetros de SQL.

NO concatenen los parámetros de SQL.

NO CONCATENEN LOS PARÁMETROS DE SQL

.

Este código es oooootro ejemplo de ese antipatrón. JDBC tiene todo lo necesario para que generes queries seguros. Hay un montón de maneras de optimizar ese código además, pero lo más importante es que simplemente NO CONCATENES LOS PARÁMETROS DE SQL.

Aquí en el foro ya he puesto ejemplos hasta el cansancio de cómo se deben armar queries con parámetros, pero una vez más aquí va:

String sql = "SELECT * FROM tabla WHERE columna LIKE ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "*" + valorQueQuieresBuscar + "*");
ResultSet rs = pstmt.executeQuery();

Y de ese modo, cuando algún mañoso ponga en tu forma de captura un valor malicioso, no habrá ningún problema.

Porque ahorita, por favor, te pido de la manera más atenta, que busques este valor usando tu código:

x';DROP TABLE contacto;--

Y vienes a platicarnos lo que pasa, para que quede para la posteridad y todos los 10mil nuevos programadores que vengan después entiendan de una vez por todas por qué NO DEBEN CONCATENAR LOS PARÁMETROS DE SQL.

Imagen de Livio

Alguien no ha descubierto..

Aqui una pista con procedures:

CallableStatement contador = (CallableStatement) con.getConnection().prepareCall("CALL proc_mostrar_detalle_de_factura(?,?);");