Código Java – Llenar un JTable desde una consulta a Base de Datos

Este es el Ejemplo #13 del Topic: Programación Gráfica en Java.

Después de haber aprendido a establecer la conexión a diferentes motores de base de datos mediante JDBC, el siguiente paso es realizar las consultas y mostrarlas. Para el ejemplo hago uso de un JTable para mostrar los datos provenientes de las consultas y para efectos didácticos he preferido usar PostgreSQL, aunque usted puede hacer uso del motor de base de datos que prefiera como cualquiera de las clases implementadas en el topic: Código Java – Establecer Conexión a Base de Datos con JDBC, que deberán ser incluidas en su proyecto, lo único que debería hacer es cambiar las instancias a las clases correspondientes como se muestra en las lineas siguientes,todo lo demás se mantiene. Observar que para este ejemplo he construido un JTable con solo 3 columnas, por ello limitarse a una consulta que retorne 3 columnas o modificar el código respectivo para ampliarlo:

Conexión a PostgreSQL:

...
        Ejm12_1_ConectarPostgreSQL cnndb = new Ejm12_1_ConectarPostgreSQL();
        CachedRowSet crs = cnndb.Function("SELECT deptno, dname, loc FROM dept")
...

Conexión a MySQL:

...
        Ejm12_2_ConectarMySQL cnndb = new Ejm12_2_ConectarMySQL();
        CachedRowSet crs = cnndb.Function("SELECT Host, User, Password FROM user");
...

Código de Ejemplo:

package beastieux.gui;

import javax.sql.rowset.CachedRowSet;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author beastieux
 */
public class Ejm13_LlenarJTableDesdeDataBase extends JFrame{

    DefaultTableModel dtmEjemplo;
    JTable tblEjemplo;
    JScrollPane scpEjemplo;
    public Ejm13_LlenarJTableDesdeDataBase()
    {

        tblEjemplo = new JTable();
        scpEjemplo= new JScrollPane();

        //Llenamos el modelo
        dtmEjemplo = new DefaultTableModel(null,getColumnas());

        setFilas();

        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);

        scpEjemplo.setViewportView(tblEjemplo);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    }

    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"Columna1","Columna2","Columna3"};
          return columna;
    }

    private void setFilas()
    {
        //Conectar a PostgreSQL\\
        Ejm12_1_ConectarPostgreSQL cnndb = new Ejm12_1_ConectarPostgreSQL();
        CachedRowSet crs = cnndb.Function("SELECT deptno, dname, loc FROM dept");

        Object datos[]=new Object[3]; //Numero de columnas de la tabla

        try {
            while (crs.next()) {
                for (int i = 0; i < 3; i++) {
                        datos[i] = crs.getObject(i + 1);
                }
                dtmEjemplo.addRow(datos);
            }

            crs.close();
        } catch (Exception e) {
        }
    }

    public static void main(String args[]) {
        Ejm13_LlenarJTableDesdeDataBase obj1 = new Ejm13_LlenarJTableDesdeDataBase();
        obj1.setVisible(true);
    }

}

Pueder ir al artículo principal:

Códigos Sencillos hechos en Java

12 thoughts on “Código Java – Llenar un JTable desde una consulta a Base de Datos

  1. Bueno humildemente gracias por el aporte. me parece excelente lo que haces, he utilizado
    tus ejercicios como ejemplo en la universidad,

  2. me gustaría que me ayudaras con un codigo que tengo parecido a esto… aunque no sé en que me fallo o hago mal.. si pudieramos hablar por correo y te mando el codigo te lo agradeceria!!!!

  3. hola exelente explicacion pero esto funciona en tiempo de ejecucion?
    eso es lo que me rompe la caabeza por decir ejecuto mi programa , tengo un jtable con registros y le inserto otro registro desde mi programa y que ese registro se muestre en el jtable, lo mismo al actualizar o eliminar me podrias ayudar

  4. Hola, te felicito tienes un blog estupendo.
    me gustaria saber como Llenar un JTable desde una consulta a Base de Datos, mas exactamente a access. Como aplicarias el codigo que tines mostrado a una base de datos access. Gracias.

  5. HOla!!!.. quisiera saber como llenar un JTable con la informacion de una tabla de la BD.. cuando el JFRame se ejecute.. utilizando DAO y VO!!
    GRACIAS!! espero puedas colaborarme 😀

  6. Muchas gracias por tu ayuda, esto ha permitido que avance con la ejecucion del programa, jeje es mi tesis de ingenieria, yo soy electronico y todo esto de java es completamente nuevo, Chevere que hayan personas como tu q ayudan y comparten el conocimiento desinteresadamente.
    Gracias nuevamente.

  7. Hola,
    En primer lugar permiteme felcitarte por tu blog, me ha ayudado mucho para aprender a programar en java desde cero, quisiera formularte una consulta, ya que tengo problemas con una aplicación que estoy llevando a cabo.
    Estoy creando un programa en java que realiza una consulta a una base de datos (MySQL) y exponerlas en forma grafica mediante JTable el problema radica en que necesito usar uno de los datos tomados mediante mouseclicked para realizar otra consulta en otra tabla y a traves
    y a traves de otro mouseClicked poder tomar este ultimo valor para modificarlo borrarlo etc… pero al hacer clic en la segunda Jtable se me cambian los valores lo cual es confuso y no se que es lo que esta pasando y como solucionarlo.
    A continuacion pongo el codigo para ver si me puedes dar una mano, gracias.

    personal = bdp.getpersonal();
    //Primera Tabla
    Object[][] data = new Object[personal.length][3];
    for (int pe=0;pe -1) && (columna > -1)){

    personal1 = bdp.getPersonalByNumper(
    Integer.valueOf((String.valueOf(tablaPersonal.getV alueAt(fila,0)))));
    textId.setText(String.valueOf(personal1.getNumper( )));
    textId1.setText(String.valueOf(personal1.getNumper ()));
    textNombres.setText(personal1.getNombres());
    textApellidos.setText(personal1.getApellidos());
    System.out.println(modeloTabla.getValueAt(fila,0)) ;
    //Segunda tabla
    int numper=Integer.parseInt(textId1.getText());
    cargofuncion = bdcf.getCargoFuncion(numper);
    Object[][] dataC = new Object[cargofuncion.length][3];
    for (int pe=0;pe<cargofuncion.length;pe++){
    dataC[pe][0]=cargofuncion[pe].getNombreCargo();
    dataC[pe][1]=cargofuncion[pe].getDescCargo();
    dataC[pe][2]=cargofuncion[pe].getNumper().getNumper();
    }

    String[] columNamesC = {"Nombre Cargo","Descripcion Cargo"};
    modeloTablaCargo= new DefaultTableModel(dataC, columNamesC);
    tablaCargo = new JTable(modeloTablaCargo);
    tablaCargo.setPreferredScrollableViewportSize(new Dimension(500, 150));
    scrollPanelCargo = new JScrollPane(tablaCargo);
    int xx=100;
    int yy=80;
    scrollPanelCargo.setBounds(xx, yy, 1000, 150);
    panelCargo.add(scrollPanelCargo);
    estado = 3;
    alterarEstado();
    }
    }
    });

    1. Hola Paul, perdón por la demora. Bien, no estoy muy seguro, pero lo que entiendo es que quieres obtener uno de los valores de un jtable para con ese valor hacer una nueva consulta que te retorne en un nuevo jtable y estos datos puedas editarlos, pues tal vez ya revisaste el post donde explico un poco sobre el evento MouseClicked sobre un JTable: Código Java – Evento MouseClicked en JTable , ahi puedes ver como obtener los datos de la tabla. Ahora dices que el evento clicked te cambia los valores de la tabla, pues en el código que me mandaste me gustaría ver lo que hay dentro de la función clicked que implementaste, pueda que la tabla está actualizándose equivocadamente, está claro que tienes que implementar métodos distintos del evento clicked para cada tabla. Tal vez podrías darme un poco mas de información de tu código, principalmente el del evento clicked de cada uno de los jtable. Saludos y suerte!!

      1. Muchas Gracias por la respuesta, sabes que aun no resuelvo el problema, te envio el codigo de la aplicación a tu E mail para ver si me puedes ayudar, gracias de Antemano.

    2. Como vas Paul revisé tu código, encontré el problema y le di solución, los detalles te lo expliqué en el correo que te envié con el código adjunto!!,Gracias por confiar en este blog. Saludos!!

Deja un comentario