martes, 28 de marzo de 2017

Como llenar un JComboBox con datos de la BD?


En la entrada anterior vimos como usar los JComboBox, nos enfocamos en lo básico y las formas simples de llenarlos, ahora les voy a mostrar como realizar el llenado por medio de una consulta a una Base de Datos, para esto usaremos el mismo Script que trabajamos en una entrada anterior sobre el MVC.


Como se mencionó, en el vídeo anterior vimos lo básico de este componente, aprendimos a crearlo y llenarlo de forma manual, en esta oportunidad actualizaremos el proyecto que consiste en una ventana con un combo y un botón, al presionar el botón automaticamente traemos la información de una tabla de nuestra base de datos.




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

En esta entrada como les dije reutilizaremos el proyecto anterior, por esa razón solo mostraré el código de las clases nuevas para que se puedan apoyar en el vídeo, igual al final pondré el enlace de descarga para que lo puedan consultar.

PersonaVO.java

Esta clase seria 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.
public class PersonaVO {
 
 private String id;
 private String nombre;
 private int edad;
 private String profesion;
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getNombre() {
  return nombre;
 }
 public void setNombre(String nombre) {
  this.nombre = nombre;
 }
 public int getEdad() {
  return edad;
 }
 public void setEdad(int edad) {
  this.edad = edad;
 }
 public String getProfesion() {
  return profesion;
 }
 public void setProfesion(String profesion) {
  this.profesion = profesion;
 }
}


PersonaDAO.java 

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
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;


public class PersonaDAO {
 
public ArrayList consultarListaPersona() {
  
  ArrayList estudiantesList=new ArrayList<>();
  
  Connection connection=null;
  Conexion miConexion=new Conexion();
  PreparedStatement statement=null;
  ResultSet result=null;
  
  PersonaVO estudianteVo;
  
  connection=miConexion.getConnection();
  
  String consulta="SELECT id,nombre,edad,profesion FROM persona ";
  
  try {
   if (connection!=null) {
    statement=connection.prepareStatement(consulta);    
    result=statement.executeQuery();
    
    while(result.next()==true){
     estudianteVo=new PersonaVO();
     estudianteVo.setId(result.getString("id"));
     estudianteVo.setNombre(result.getString("nombre"));
     estudianteVo.setEdad(result.getInt("edad"));
     estudianteVo.setProfesion(result.getString("profesion"));
          
     estudiantesList.add(estudianteVo);
    }  
   }
  } catch (SQLException e) {
   System.out.println("Error en la consulta de Estudiantes: "+e.getMessage());
  }finally{
   try {
    connection.close();
    miConexion.desconectar();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return estudiantesList;
 }

}


Conexion.java

Esta clase será la encargada de establecer la conexión con nuestra base de datos.
import java.sql.*;
public class Conexion {
 private String nombreBd="codejavu";
 private String usuario="root";
 private String password="";
 private String url="jdbc:mysql://localhost/"+nombreBd;

 Connection conn=null;
 //constructor de la clase
 public Conexion(){
  try {
   //obtener el driver
   Class.forName("com.mysql.jdbc.Driver");
   //obtener la conexion
   conn=DriverManager.getConnection(url,usuario,password);
   if (conn!=null) {
   }
  } catch (ClassNotFoundException e) {
   System.out.println("ocurre una ClassNotFoundException : "+e.getMessage());
  } catch (SQLException e) {
   System.out.println("ocurre una SQLException: "+e.getMessage());
  }
 }
 public Connection getConnection(){
  return conn;
 }
 public void desconectar(){
  try {
   conn.close();
   conn=null;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
}


VentanaPrincipal.java

Por ultimo nuestra ventana principal contará con el combo y el botón que ejecutará el evento para obtener la información, todo este proceso se realiza en el método consultarPersonas() el cual hace el llamado a nuestro DAO y asigna la información al JComboBox.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class VentanaPrincipal extends JFrame implements ActionListener {

 private JComboBox comboBox;
 private JLabel lblMsj;
 private JButton btnConsultar;

 public VentanaPrincipal() {
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setSize(306, 211);
  getContentPane().setLayout(null);
  setLocationRelativeTo(null);

  iniciaComponentes();
 }

 private void iniciaComponentes() {
  comboBox = new JComboBox();
  comboBox.setBounds(10, 35, 270, 20);
  comboBox.addItem("Seleccione");
  comboBox.addItem("Opcion 1");
  comboBox.addItem("Opcion 2");
  comboBox.addActionListener(this);

  lblMsj = new JLabel(" ");
  lblMsj.setBounds(10, 11, 270, 14);

  btnConsultar = new JButton("Consultar");
  btnConsultar.setBounds(191, 139, 89, 23);
  btnConsultar.addActionListener(this);

  getContentPane().add(lblMsj);
  getContentPane().add(btnConsultar);
  getContentPane().add(comboBox);
 }

 @Override
 public void actionPerformed(ActionEvent e) {

  if (e.getSource() == btnConsultar) {
   consultarPersonas();
  }

  if (e.getSource() == comboBox) {
   if (comboBox.getSelectedIndex() >= 0) {
    lblMsj.setText(comboBox.getSelectedItem().toString());
   }
  }
 }

 private void consultarPersonas() {
  comboBox.removeAllItems();
  PersonaDAO miPersonaDao = new PersonaDAO();
  ArrayList < personavo > listaPersonas = miPersonaDao.consultarListaPersona();

  for (int i = 0; i < listaPersonas.size(); i++) {
   comboBox.addItem(listaPersonas.get(i).getId() + " - " + listaPersonas.get(i).getNombre());
  }
  lblMsj.setText(comboBox.getSelectedItem().toString());
 }
}
Como vemos en el método consultarPersonas() inicialmente se eliminan todos los items del combo para que se llene cada vez con lo obtenido en la base de datos, de está manera no quedarán items repetidos.

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


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

3 comentarios:

  1. hola mira yo lleno un comboboz con la bd, pero cuando traigo algo de bd q ya fue guardado anteriormente no me selecciona el item que deseo.

    ResponderEliminar
  2. Que buen trabajo realizas,explicando estos temas, en el ejemplo se cargan los datos pulsando el boton consultar,como se puede hacer para que los datos se carguen automaticamente en el combo, saludos desde Cali ve!!!

    ResponderEliminar
  3. Buenos días, quiero agradecer lo util que son los ejemplos que ilustras en esta pagina, yo los utilizo en mi aprendizaje y son de gran utilidad, situacion esta, que me ha ayudado a crecer en la realización de rutinas complejas. Gracias por tu esfuerzo.

    ResponderEliminar

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