sábado, 1 de abril de 2017

Como llenar JTable desde la Base de Datos en Java ?

En esta oportunidad les mostraré como trabajar con el componente JTable en Java y veremos como cargar información directamente desde la base de datos.

Al final pueden descargar el proyecto....... es muy sencillo pero será de mucha útilidad. 




En el vídeo pueden ver como realizo el proceso paso a paso, a continuación explicaré las principales clases de nuestro sistema y al final compartiré el enlace de descarga para que puedan obtener la información.

Igual que en la entrada anterior tendremos una estructura de proyecto muy similar, está será compuesta por una clase conexión, la ventana de consulta, la clase con el main y los correspondientes Dao y Vo.



La base de datos será la misma trabajada en ejemplos anteriores, para esto es importante tener en cuenta que se debe vincular el driver mysql para que se establezca la conexión con la BD, si no sabes como se realiza el proceso te comparto este otro video con el paso a paso...

Script BD

Este script es el mismo usado en el ejemplo anterior...


CREATE DATABASE codejavu;

/*Table structure for table `persona` */

CREATE TABLE `persona` (
  `id` int(10) NOT NULL,
  `nombre` varchar(30) DEFAULT NULL,
  `edad` int(3) DEFAULT NULL,
  `profesion` varchar(30) DEFAULT NULL,
  `telefono` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `persona`(`id`,`nombre`,`edad`,`profesion`,`telefono`) values (111,'admin',25,'Ingeniero','5555'),(123,'Cristian David Henao',28,'Instructor','34566'),(258,'Carlos Andrés Henao',25,'Ingeniero','4567');


PersonaVO.java

Esta clase igual que el ejemplo anterior, será la encargada  de tener el equivalente a las tablas de nuestra base de datos, en este caso como el proyecto cuenta solo con una tabla "persona" generamos la clase PersonaVO con los atributos correspondientes a los campos de nuestra tabla.
package vo;

public class PersonaVo {
 
 private Integer idPersona;
 private String nombrePersona;
 private Integer edadPersona;
 private String profesionPersona;
 private Integer telefonoPersona;
 
 /**
  * @return the idPersona
  */
 public Integer getIdPersona() {
  return idPersona;
 }
 /**
  * @param idPersona the idPersona to set
  */
 public void setIdPersona(Integer idPersona) {
  this.idPersona = idPersona;
 }
 /**
  * @return the nombrePersona
  */
 public String getNombrePersona() {
  return nombrePersona;
 }
 /**
  * @param nombrePersona the nombrePersona to set
  */
 public void setNombrePersona(String nombrePersona) {
  this.nombrePersona = nombrePersona;
 }
 /**
  * @return the edadPersona
  */
 public Integer getEdadPersona() {
  return edadPersona;
 }
 /**
  * @param edadPersona the edadPersona to set
  */
 public void setEdadPersona(Integer edadPersona) {
  this.edadPersona = edadPersona;
 }
 /**
  * @return the profesionPersona
  */
 public String getProfesionPersona() {
  return profesionPersona;
 }
 /**
  * @param profesionPersona the profesionPersona to set
  */
 public void setProfesionPersona(String profesionPersona) {
  this.profesionPersona = profesionPersona;
 }
 /**
  * @return the telefonoPersona
  */
 public Integer getTelefonoPersona() {
  return telefonoPersona;
 }
 /**
  * @param telefonoPersona the telefonoPersona to set
  */
 public void setTelefonoPersona(Integer telefonoPersona) {
  this.telefonoPersona = telefonoPersona;
 }
}


PersonaDAO.java 

De la misma manera esta clase será la encargada de centralizar todo el acceso a la tabla "persona" de nuestra base de datos, en este caso contará con el método consultarListaPersona() que obtendrá la información de nuestra tabla
package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import vo.PersonaVo;
import conexion.Conexion;

/**
 * Clase que permite el acceso a la base de datos
 * 
 * @author chenao
 * 
 */
public class PersonaDao {

 public ArrayList buscarUsuariosConMatriz() {

  Conexion conex = new Conexion();
  ArrayList miLista = new ArrayList();
  PersonaVo persona;
  try {
   Statement estatuto = conex.getConnection().createStatement();
   ResultSet rs = estatuto.executeQuery("SELECT * FROM persona ");

   while (rs.next()) {
    persona = new PersonaVo();
    persona.setIdPersona(Integer.parseInt(rs.getString("id")));
    persona.setNombrePersona(rs.getString("nombre"));
    persona.setEdadPersona(Integer.parseInt(rs.getString("edad")));
    persona.setProfesionPersona(rs.getString("profesion"));
    persona.setTelefonoPersona(Integer.parseInt(rs.getString("telefono")));
    miLista.add(persona);
   }
   rs.close();
   estatuto.close();
   conex.desconectar();

  } catch (SQLException e) {
   System.out.println(e.getMessage());
   JOptionPane.showMessageDialog(null, "Error al consultar", "Error",
     JOptionPane.ERROR_MESSAGE);

  }
  return miLista;
 }
}


Conexion.java

Encargada de establecer la conexión con nuestra base de datos.
package conexion;

import java.sql.*;


/**
 * Clase que permite conectar con la base de datos
 * @author chenao
 *
 */
public class Conexion {
   static String bd = "codejavu";
   static String login = "root";
   static String password = "";
   static String url = "jdbc:mysql://localhost/"+bd;

   Connection conn = null;

   /** Constructor de DbConnection */
   public Conexion() {
      try{
         //obtenemos el driver de para mysql
         Class.forName("com.mysql.jdbc.Driver");
         //obtenemos la conexión
         conn = DriverManager.getConnection(url,login,password);

         if (conn!=null){
            //System.out.println("Conección a base de datos "+bd+" OK");
         }
      }
      catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }catch(Exception e){
         System.out.println(e);
      }
   }
   /**Permite retornar la conexión*/
   public Connection getConnection(){
      return conn;
   }

   public void desconectar(){
      conn = null;
   }

}


VentanaConsulta.java

Esta ventana presentará la tabla con la información, la cual se cargará inmediatamente, también contará con el botón que ejecutará el evento para obtener la información en caso de que la base de datos sea actualizada, todo este proceso se realiza en los métodos construirTabla() encargado de armar nuestra tabla y el método obtenerMatriz() el cual hace el llamado a nuestro DAO y asigna la información al JTable.
package ventanas;

import java.awt.event.ActionEvent;

public class VentanaConsulta extends JFrame implements ActionListener {

 private JLabel labelTitulo;
 JTable miTabla1;
 JScrollPane mibarra1;
 private JButton btnNewButton;

 /**
  * constructor de la clase donde se inicializan todos los componentes de la
  * ventana de registro
  */
 public VentanaConsulta() {
  setSize(462, 281);
  setTitle("CoDejaVu : Componentes JTable");
  setLocationRelativeTo(null);
  setResizable(false);
  
  inicializaComponentes();
  construirTabla();
 }

 private void inicializaComponentes() {
  getContentPane().setLayout(null);

  labelTitulo = new JLabel();
  labelTitulo.setBounds(27, 11, 400, 30);
  labelTitulo.setHorizontalAlignment(SwingConstants.CENTER);
  labelTitulo.setText("CONSULTA DE PERSONAS");
  labelTitulo.setFont(new java.awt.Font("Verdana", 1, 18));
  getContentPane().add(labelTitulo);
  
  mibarra1=new JScrollPane();
  mibarra1.setBounds(27, 72,400,130);
  getContentPane().add(mibarra1);
  
  btnNewButton = new JButton("Actualizar");
  btnNewButton.setBounds(335, 219, 89, 23);
  getContentPane().add(btnNewButton);
  btnNewButton.addActionListener(this);
   
 }
 
 private void construirTabla() {
  String titulos[]={ "Codigo", "Nombre", "Edad", "Profesión","Telefono" };
  String informacion[][]=obtenerMatriz();
  
  miTabla1=new JTable(informacion,titulos);
  mibarra1.setViewportView(miTabla1);
  
 }

 private String[][] obtenerMatriz() {
  
  PersonaDao miPersonaDao=new PersonaDao();
  ArrayListmiLista=miPersonaDao.buscarUsuariosConMatriz();
  
  String matrizInfo[][]=new String[miLista.size()][5];
  
  for (int i = 0; i < miLista.size(); i++) {
   matrizInfo[i][0]=miLista.get(i).getIdPersona()+"";
   matrizInfo[i][1]=miLista.get(i).getNombrePersona()+"";
   matrizInfo[i][2]=miLista.get(i).getProfesionPersona()+"";
   matrizInfo[i][3]=miLista.get(i).getEdadPersona()+"";
   matrizInfo[i][4]=miLista.get(i).getTelefonoPersona()+"";
  }
   
  return matrizInfo;
 }



 @Override
 public void actionPerformed(ActionEvent e) {
  if (e.getSource()==btnNewButton) {
   construirTabla();
  }
 }
}


Principal.java   
Por ultimo tenemos la clase principal la cual consiste simplemente en el metodo main() que perimitirá iniciar el sistema.
package principal;

import ventanas.VentanaConsulta;

public class Principal {

 /**
  * Llama la ventana principal
  * @param args
  */
 public static void main(String[] args) {
  VentanaConsulta miVentanaConsulta;
  miVentanaConsulta= new VentanaConsulta();
  miVentanaConsulta.setVisible(true);
 }
}


Y listo, básicamente aquí podemos ver de forma rapida como obtener la información de la base de datos y presentarla en nuestro componente JTable...  

Descarga!!!

El ejemplo es muy simple, sin mayores complicaciones, aquí dejo el enlace de descarga por si lo quieren revisar ;)..está en Eclipse pero si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el....... recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)

También te podría Interesar.
¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

9 comentarios:

  1. hola amigo como estas, son geniales tus tutoriales, tengo una consulta para hacerte. si deseo realizar esto, en un desk debo crear cada clase en un JInternalFrame?

    ResponderEliminar
  2. Con este codigo logre entender que era mi error... gracias

    ResponderEliminar
  3. Your Topic on J table is really fascinating and how you managed lay down each pointer is also really intriguing and it has made information really understandable for me and many others who are going to read this article, you must check out data science course in bangalore they have a lot to offer with regards to data science in terms of helping you gain a basic understanding through theoretical knowledge and provide live projects where you will be getting practical experience as well, they also guide freshed and professionals who want to make a career change in the domain that will be well suited for them.

    ResponderEliminar
  4. Mil, pero mil gracias por compartir tus conocimientos Maestro.

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!