Tutorial Java – Consulta de Todos los registros con JTable (Videos)


Tutorial Java

Cómo lo hacen en Java

Como sabes la programación es un mundo lleno de posibilidades donde existen mil y una forma de solucionar un problema o de realizar algún tipo de acción.

La semana pasada creé un video donde te mostraba cómo crear consultas por navegación de registros, hoy te muestro otro tipo de consultas de registros, el cual es mostrando los datos en una Grilla, el cual en Java lo conocemos por JTable.

Hoy quise mostrarte una nueva forma de mostrar los registros en el formulario.

Evidentemente el tipo de solución a implementar en tu Sistema va depender siempre del conocimiento del lenguaje que tengas. Cuando más conocimientos tengas más libertad tendrás para elegir el modelo, la forma, la presentación de una forma única que identifique el sistema como tuyo.

Aunque a veces también quien define cómo funcionará el sistema es el cliente, si el cliente prefiere no mostrar toda la información de una vez, para asegurar la confiabilidad o si el cliente es un usuario moderno que prefiere mostrar todos los registros de una vez, ten también por seguro que habrá clientes que te podrá solicitar una combinación de dos o mas formas.

En éste video tutorial, divido en dos partes, te muestro cómo utilizar el JTable, para mostrar todos los registros de la tabla Ciudades.

IMPORTANTE.

Tomate un tiempo para practicar principalmente éste ejercicio ya que después voy a estar realizando mas actividades sobre el mismo, te será más facil entender los siguientes artículos si practicaste lo que viste hoy en estos dos videos.´

Cualquier duda espero tus comentarios.

Un cordial Saludo

Marcos Jara

Esta entrada fue publicada en Uncategorized y etiquetada , , , , , , , , , , . Guarda el enlace permanente.

37 respuestas a Tutorial Java – Consulta de Todos los registros con JTable (Videos)

  1. william dijo:

    Gracias Marcos Jara, muy buen tutorial…
    Marcos por favor no te olvides de publicar los archivos del carrito de compras,…

    Saludos,

    William Granda
    Quito Ecuador.

  2. Diego Armando dijo:

    Hola!!!
    Ahora dandote lata en esta parte estoy implementando esto en NetBeans pero al momento de hacer el metodo recuperardatos me marca errores en el arreglo que hago y al momento de asignarlo al model
    while(ControladorBD.finRecordSet()){
    String[] registro = (ControladorBD.getInt(«idft»).toString(),
    ControladorBD.getString(«Cta_Maestra»));
    }
    Mando llamar al metodo desde el preAddCode de las propiedades de mi tabla puedes darme alguna sugerencia Gracias!!!

  3. daniel dijo:

    Hola Marcos!!!!!
    tengo un problemon con el boton de inicio osea ( <jdbc:mysql://localhost/biblioteca – root – root
    Conexion realizada con exito!!
    java.lang.Exception: No es un comando SQL válido!
    at com.progress.bd.ControladorBD.validateSqlCommand(ControladorBD.java:195)
    at com.progress.bd.ControladorBD.addSql(ControladorBD.java:124)
    at ConsultaClientes$1.actionPerformed(ConsultaClientes.java:120)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    espero y me puedas decir en que estoy mal.

    un saludo y muchas gracias!!!!!!!!!!!!

    • Marcos Jara dijo:

      Hola Daniel

      No enviaste el comando que quieres ejecutar.

      La excepcion que te da es que estas intentando un comando SQL no valido.

      El controlador intenta verificar si el comando empieza con SELECT, INSERT, DELETE o UPDATE.

      Tiene que ser uno de estos comandos los que vas a ejecutar.

      Saludos

  4. Daniel dijo:

    hola Marcos !!!!!!!!!!
    me equivoq con lo anterior no le hagas caso una disculpa
    bueno tengo un problemon q no encuentro la falla y no se como.

    NO ME DEJA PONER ESTO
    ControladorBD.getInt(«ciu_codigo»).toString()

    me dice que no puedo invocar el toString () en el tipo primitivo int

    y eso me sale en todos los ejemplos q as puesto y no he podido avanzar mucho espero y me puedas ayudar

    saludos!!!!!!!!!!!!

  5. Oscar Careaga dijo:

    que tal marcos esta muy buena tu iniciativa de compartir tus conocimientos con nosotros es raro encontrar vídeos tutoriales donde expliquen tan bien , me servirá mucho! gracias y adelante!

  6. Ivan Grandi dijo:

    Buenas la verdad que muy bueno el tutorial, y lo pude realizar muy facilmente lo unico que no entendi es esta parte.

    public Object getValueAt(int rowIndex, int columIndex) {
    Object resultado = ciudades.get(rowIndex)[columIndex];
    return resultado;
    }

    Porque creas un objeto del tipo Object y le asignas la ciudad y después el index de la columna. O se entendí que eso es lo que después lee para rellenar las columnas pero no entiendo porque tiene que ser Object y justo con esa sintaxis. O se si vos no me decís que es así no lo puedo hacer nunca :O jaja.

    Gracias

    • Marcos Jara dijo:

      Hola Ivan.

      Bueno todo tiene una explicacion razonable, por eso trataré de explicarte de la mejor manera:

      El método getValueAt debes sobreescribirlo para indicar los valores exactos de cada celda que tienes en el JTable.

      Digamos que el JTable es quien va invocar al metodo getValueAt y lo va invocar no solo una vez, sino que la cantidad exacta de celdas que tienes en la tabla, es decir si por ejemplo tu tienes 8 registros y cada registro tiene 2 columnas, entonces tendrás 16 celdas, significa que tu JTable va invocar el método asi:

      getValueAt(0,0);
      getValueAt(0,1);
      getValueAt(1,0);
      getValueAt(1,1);

      getValueAt(7,1);

      Lo unico que tu tienes que hacer con éste método entonces es asegurarte de proveer los valores correctos, de acuerdo a los datos que tienes en tu ARRAY para mostrar exactamente lo que quieres en cada fila y columna de la tabla.

      Tu tienes los registros en un LIST y las columnas en un ARRAY

      Sobre tu pregunta de por que creo Object, es simplemente por que el método getValueAt debe retornar Object y eso es algo que ni tu ni yo podemos cambiarlo por que es un método de la clase padre AbstractTableModel que tienes que sobre-escribirlo. Bien que se puede crear con otro tipo de dato String o Integer por ejemplo, pero igualmente antes de retornar vas a tener que hacer CAST a Object.

      Espero haberte ayudado Ivan.

      Cualquier cosa por favor comenta nuevamente.

      Saludos

  7. Ivan Grandi dijo:

    Buenas me volví loco y hace una hora y media que estoy buscando :|, pero no logro cambiar los títulos de las celdas que dicen «A» y «B», seguro que es facil cuando tengas un seg decime. Gracias !

  8. Oscar Careaga dijo:

    Hola profe!! una pregunta como se puede actualizar un jTable, cuando insertas modificas un registro ?? estoy siguiendo el modelo que esta aquí pero hasta ahora no consigo hacer que actualice de forma inmediata!!gracias!!

    • Marcos Jara dijo:

      Hola Oscar,

      Bueno, la verdad eso esta pendiente en otro tutorial que lo tendré que hacer, pero por el momento te adelanto cómo se puede hacer..

      El problema puede ser solucionado en dos sencillos pasos, te voy a pasar los codigos para ver si conseguis entender…

      Primero creo un botón en el formulario, para probar de forma estática el cambio de informacion de la ciudad en el grid.

      private JButton getJButtonTeste() {
      if (jButtonTeste == null) {
      jButtonTeste = new JButton();
      public void actionPerformed(java.awt.event.ActionEvent e) {
      String [] registro = {
      «2», «Nueva ciudad»
      };

      model.actualizarCiudad(registro);
      }
      });

      }
      return jButtonTeste;
      }
      El método actualizarCiudad del model que estoy llamando todavía no lo tenemos, así que luego creo el metodo actualizarCiudad en el model, que va recibir el la ciudad que se tiene que actualizar en el grid (insertar o editar). La idea es que el modelo sepa de forma automática si se trata de una insercion o actualizacion

      En el model:
      public void actualizarCiudad(String [] ciudadAActualizar){
      for (int i = 0; i < ciudades.size(); i++) {
      if (ciudades.get(i)[0].equals(ciudadAActualizar[0])){
      ciudades.set(i, ciudadAActualizar);
      fireTableDataChanged();
      }
      }
      }

      Este método busca en el List uno por uno para ver si el codigo de la ciudad corresponde al que se esta quieriendo modificar, de ser asi, reemplaza directamente la informacion del list.

      Al ejecutar el metodo fireTableDataChanged, se vuelve a sobrecargar el grid

      Saludos

  9. Oscar Careaga dijo:

    Gracias!!! profe!!! me servirá mucho!! saludos

  10. Roberto dijo:

    Marcos que tal,

    Oye tengo un problema en este codigo:

    while (ControladorBD.finRecordSet()){
    String[] registro = (
    ControladorBD.getInt(«ciu_codigo»).toString(),
    ControladorBD.getString(«ciu_descripcion»)
    );

    me dice que despues de .toString() esperaba un ; y me subraya ControladorBD en rojo.

    Me podras ayudar??

  11. Jose Emigdio dijo:

    Hola marcos, muy buena pagina, me ah ayudado mucho en el instituto. Tengo una duda respecto a este tutorial. Quiero que la consulta se muestra a la jtable a través de un botón, pero cuando intento escribir el método: consultarDatos() dentro de el jbutton, aparece la sentencia sql ejecutada en la consola del eclipse pero los datos no son cargados en la JTable. como haría para que dichos datos sean cargados en ella?

    Gracias!

    Otra cosa, hay alguna forma de que se puedan imprimir los datos contenidos en la jtable a través de un botón?

    Gracias,

    • Marcos Jara dijo:

      Hola José

      La verdad que te tendría que funcionar, si sigues los mismos principios que aplico en éste tutorial, ten en cuenta que los datos del jTable solamente muestran los datos que estan en el List, por lo cual si cargas los datos en el List y lo actualizas, te tendría que automáticamente desplegar la información.

      En relación al imprimir, no sé a qué te refieres, si con algun comando directo se puede mandar a la impresora temo que no, pero si es impresión en hoja o a PDF si claro que se puede crear el Report para desplegarlo mediante el Jasper Reports,

      Saludos

  12. Oscar dijo:

    Marcos que tal,

    Oye tengo un problema en este codigo:

    while (ControladorBD.finRecordSet()){
    String[] registro = (
    ControladorBD.getInt(“ciu_codigo”).toString(),
    ControladorBD.getString(“ciu_descripcion”)
    );

    me dice que despues de .toString() esperaba un . y me subraya ControladorBD en rojo.

    Me podras ayudar??

  13. adolfo lopez dijo:

    hola marcos muy buen tutorial felicidades
    marcos teng un problemilla s trabajo en tu tutorial con netbeans y el problema es que veo que tienes un metodo que retorna la tabla y en el netbeans no lo genera de esa forma el problema es que no me muestra nada en la tabla el codigo es este :

    package ejemplojtable;

    import com.tutorialjava.bd.ControladorBD;
    import javax.swing.JTable;

    public class ConsultaCiudadesJtable extends javax.swing.JFrame {
    private CiudadesJTableModel model = new CiudadesJTableModel();

    public ConsultaCiudadesJtable() {
    initComponents();
    getjTable1();
    }

    public JTable getjTable1() {
    return jTable1;
    }

    @SuppressWarnings(«unchecked»)
    //
    private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jTable1 = new javax.swing.JTable();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTable1.setModel(model);
    RecuperarDatos();
    jScrollPane1.setViewportView(jTable1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
    .addContainerGap(15, Short.MAX_VALUE)
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 420, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap())
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
    .addContainerGap(14, Short.MAX_VALUE)
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap())
    );

    pack();
    }//

    private void RecuperarDatos(){

    String sql=»select * from ciudades order by ciu_codigo»;
    try {
    ControladorBD.addSql(sql);
    ControladorBD.execute();

    while(ControladorBD.finRecordSet()){
    String[] registro ={
    ControladorBD.getInt(«ciu_codigo»).toString(),
    ControladorBD.getString(«ciu_descripcion»)
    };
    model.ciudades.add(registro);

    }

    } catch (Exception e) {

    }
    }
    public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new ConsultaCiudadesJtable().setVisible(true);
    }
    });
    }

    // Variables declaration – do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration

    }
    llebo horas tratando de q salga pero nada
    me podrias ayudar ???

    • Marcos Jara dijo:

      Lastimosamente no consigo detectar el problema, talvez sea por la identacion.

      A mi parecer esta todo bien, sinceramente no sé por que puede ser que no te esté funcionando.

      Verifica si está todo bien en el table model, y en el archivo de conexion con la BD (Archivo Properties)

      El ControladorBD imprime un log en la consola mostrando los comandos SQLs que ejecuta, si no te esta imprimiendo es por que probablemente no se llego a conectar a la BD

    • Juan Gomez dijo:

      Agregar un boton y coloca esta parte del codigo:

      jTable1.setModel(model);
      RecuperarDatos();

      en el… a mi me mostro los datos de ese modo :S
      no se si por usar Windowsbuilder hay algo diferente

  14. Garcia Mauro dijo:

    Hola Marcos!!
    Una pregunta como hago para hacerle un encabezado a un jTable?? para ponerle un nombre a cada columna??
    Vengo siguiendo todos tus tutoriales y me ha servido de gran ayuda!! gracias por aportar tus conocimientos!!
    Garcia Mauro

    • Marcos Jara dijo:

      Hola Garcia

      Eso se soluciona utilizando el metodo getColumnName de tu Table Model

      Para cada indice debes retornar un nombre de campo diferente, lo estare mostrando en el siguiente tutorial

      Saludos

  15. hiperion dijo:

    Está genial!!!! Vendría bien que compartieses los proyectos de eclipse para poder hacer pruebas.

  16. rodb dijo:

    Hola Marcos!!
    estoy desarrollando una aplicación en la que esta consulta una base de datos en mysql, en la que existen dos tablas, una de categorías y otra de items, luego en un jtree se muestran las categorías y en un jtable los items correspondientes a las categorías, bueno mi problema es que necesito que cree un archivo pdf al presionar un botón y que este contenga la información del jtable obviamente con los datos que están siendo consultados al momento,

  17. Leonardo dijo:

    Buenas noches marcos, tus videos me fueron de gran utilidad, quería hacer una consulta, ya que tengo problemas para mostrar el jtable con el scrollPane, la parte funcional, de consultas e inserción de datos Ok, me podrías pasar alguna idea?
    private JScrollPane getJScrollPane() {
    if (jScrollPane == null) {
    jScrollPane = new JScrollPane();
    jScrollPane.setLayout(null);
    jScrollPane.setBounds(new Rectangle(2, 194, 348, 102));
    jScrollPane.setViewportView(getJTable());
    //aca debería haber agregado el objeto jtable desde getJTable, hasta probé con jScrollPane.setVisible(true); y nada………..

    }
    return jScrollPane;
    }
    **************************************************************************************
    private JTable getJTable() {
    if (jTable == null) {
    jTable = new JTable();
    jTable.setModel(modelo);

    recuperarDatos();

    }
    return jTable;
    }

    • Marcos Jara dijo:

      Hola Leonardo,

      Por favor, sigue el video tutorial para entender como funciona esa parte, es un poquito quisquilloso, pero si lo haces tal cual te aseguro que funciona.

      Saludos

  18. Gustavo dijo:

    Hola Marcos!,
    El tutorial está muy bueno!!, ahora a mí no me muestra los datos; la consulta la hace OK; salen dos lineas (las correctas) pero los datos estan en blanco. ¿porque será?…

    Desde ya muchas gracias!

  19. Gustavo dijo:

    Hola Marcos;

    Ya lo resolví, el getValueAt pasaba un null…… 😉

  20. Carlos dijo:

    Hola marcos tengo un problema con el controladorBD a mi no me da la opción para ponerlo y cuando lo pongo me marca error de sintaxis

  21. Luis dijo:

    Como podria crear un JComboBox dinamico, para hacerlo componentes y extraer tablas des postgresql

Replica a Marcos Jara Cancelar la respuesta