he estado ocupado en unos proyectos, pero estoy de nuevo para compartir lo poco que se de desarrollo de sistemas, el dia de hoy comparto como llenar un objeto JTable en Java con datos de una base de datos MySQL.
antes de continuar supongo que ya tienen conocimientos de programacion en especial en Java. Yo usare Netbeans pero ustedes pueden usar cualquier IDE.
para este ejemplo trabajaremos con 3 archivos, Clase,Interfaz y JFrame Form. Y una tabla llamada productos con los campos id,descripcion y precio, algo simple
primero vamos a crear nuestra Interfaz que le llamaremos Idb (le pueden como quieran).
y vamos a inicializar nuetros metodos.
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.table.DefaultTableModel;
/**
*
* @nadie
*/
public interface Idb {
DefaultTableModel Grid_DataSource(String sql); //LLENAR JTABLE
DefaultListModel ListBox_DataSource(String sql,String Campo); //LLENAR LISTBOX
void ComboBox_DataSource(String sql,String Campo,JComboBox combo); //LLENAR COMBO
}
ahora lo siguiente es declarar nuestra clase llamada dbConexion. y escribimos el siguiente codigo.
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
/**
*
* @nadie
*/
public class dbConexion implements Idb {
public String servidor;
public String usuario;
public String password;
public String base_datos;
@Override
public DefaultTableModel Grid_DataSource(String sql) {
DefaultTableModel tabla=new DefaultTableModel();
Connection cnn=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
cnn=(Connection) DriverManager.getConnection("jdbc:mysql://"+ this.servidor+ ":3306/"+this.base_datos, this.usuario, this.password);
Statement st=cnn.createStatement();
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData mtd=rs.getMetaData();
int columnas=mtd.getColumnCount();
//asignar las etiquetas para las columnas
for(int x=1;x<=columnas;x++)
{
tabla.addColumn(mtd.getColumnLabel((x)));
}
while(rs.next())
{
//agregar filas(rows) con sus datos
Object[] filas=new Object[columnas];
for(int i=0;i<columnas;i++)
{
filas[i]=rs.getObject(i+1);
}
tabla.addRow(filas);
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.toString());
}
finally{
try {
cnn.close();
} catch (SQLException ex) {
Logger.getLogger(dbConexion.class.getName()).log(Level.SEVERE, null, ex);
}
}
return tabla;
}
@Override
public DefaultListModel ListBox_DataSource(String sql,String Campo) {
DefaultListModel lista=new DefaultListModel();
Connection cnn=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
cnn=(Connection) DriverManager.getConnection("jdbc:mysql://"+ this.servidor+ ":3306/"+this.base_datos, this.usuario, this.password);
Statement st=cnn.createStatement();
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData mtd=rs.getMetaData();
int columnas=mtd.getColumnCount();
while(rs.next())
{
lista.addElement(rs.getString(Campo));
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.toString());
}
finally{
try {
cnn.close();
} catch (SQLException ex) {
Logger.getLogger(dbConexion.class.getName()).log(Level.SEVERE, null, ex);
}
}
return lista;
}
@Override
public void ComboBox_DataSource(String sql, String Campo, JComboBox combo) {
combo.removeAllItems();
Connection cnn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
cnn=(Connection) DriverManager.getConnection("jdbc:mysql://"+ this.servidor+ ":3306/"+this.base_datos, this.usuario, this.password);
Statement st=cnn.createStatement();
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData mtd=rs.getMetaData();
while(rs.next())
{
combo.addItem(rs.getString(Campo));
}
} catch (ClassNotFoundException | SQLException ex)
{
Logger.getLogger(frmDatos.class.getName()).log(Level.SEVERE, null, ex);
}
finally{
try {
cnn.close();
} catch (SQLException ex) {
Logger.getLogger(dbConexion.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
creamos un JFrame Form que llamaremos frmDatos y 4 objectos : Listbox(lstProductos), comboBox(cmbProductos) , JTable(grProductos) y un boton.
en el evento ActionPerformed escribimos el siguiente codigo.
dbConexion cnn=new dbConexion();
cnn.base_datos="base de datos"; //nombre de la base de datos
cnn.password="12345"; //password de la base de datos
cnn.servidor="servidsor"; //nombre del server
cnn.usuario="usuario"; //es obvio
//enlazar con los controles u objectos;
//listbox
this.lstProductos.setModel(cnn.ListBox_DataSource("select * from productos", "descripcion"));
//combobox
cnn.ComboBox_DataSource("select * from productos", "descripcion", cmbProductos);
//tabla
this.grProductos.setModel(cnn.Grid_DataSource("select * from productos"));
como veran tanto el listbox como jtable uso ListModel y TableModel para retornar ese valor. en el caso del combo como se trabaja directamente con el metodo addItem, solo pase un objeto de tipo combo y listo.
espero que les ayude en sus proyectos.
saludos y hasta la proxima.
antes de continuar supongo que ya tienen conocimientos de programacion en especial en Java. Yo usare Netbeans pero ustedes pueden usar cualquier IDE.
para este ejemplo trabajaremos con 3 archivos, Clase,Interfaz y JFrame Form. Y una tabla llamada productos con los campos id,descripcion y precio, algo simple
primero vamos a crear nuestra Interfaz que le llamaremos Idb (le pueden como quieran).
y vamos a inicializar nuetros metodos.
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.table.DefaultTableModel;
/**
*
* @nadie
*/
public interface Idb {
DefaultTableModel Grid_DataSource(String sql); //LLENAR JTABLE
DefaultListModel ListBox_DataSource(String sql,String Campo); //LLENAR LISTBOX
void ComboBox_DataSource(String sql,String Campo,JComboBox combo); //LLENAR COMBO
}
ahora lo siguiente es declarar nuestra clase llamada dbConexion. y escribimos el siguiente codigo.
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
/**
*
* @nadie
*/
public class dbConexion implements Idb {
public String servidor;
public String usuario;
public String password;
public String base_datos;
@Override
public DefaultTableModel Grid_DataSource(String sql) {
DefaultTableModel tabla=new DefaultTableModel();
Connection cnn=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
cnn=(Connection) DriverManager.getConnection("jdbc:mysql://"+ this.servidor+ ":3306/"+this.base_datos, this.usuario, this.password);
Statement st=cnn.createStatement();
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData mtd=rs.getMetaData();
int columnas=mtd.getColumnCount();
//asignar las etiquetas para las columnas
for(int x=1;x<=columnas;x++)
{
tabla.addColumn(mtd.getColumnLabel((x)));
}
while(rs.next())
{
//agregar filas(rows) con sus datos
Object[] filas=new Object[columnas];
for(int i=0;i<columnas;i++)
{
filas[i]=rs.getObject(i+1);
}
tabla.addRow(filas);
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.toString());
}
finally{
try {
cnn.close();
} catch (SQLException ex) {
Logger.getLogger(dbConexion.class.getName()).log(Level.SEVERE, null, ex);
}
}
return tabla;
}
@Override
public DefaultListModel ListBox_DataSource(String sql,String Campo) {
DefaultListModel lista=new DefaultListModel();
Connection cnn=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
cnn=(Connection) DriverManager.getConnection("jdbc:mysql://"+ this.servidor+ ":3306/"+this.base_datos, this.usuario, this.password);
Statement st=cnn.createStatement();
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData mtd=rs.getMetaData();
int columnas=mtd.getColumnCount();
while(rs.next())
{
lista.addElement(rs.getString(Campo));
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.toString());
}
finally{
try {
cnn.close();
} catch (SQLException ex) {
Logger.getLogger(dbConexion.class.getName()).log(Level.SEVERE, null, ex);
}
}
return lista;
}
@Override
public void ComboBox_DataSource(String sql, String Campo, JComboBox combo) {
combo.removeAllItems();
Connection cnn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
cnn=(Connection) DriverManager.getConnection("jdbc:mysql://"+ this.servidor+ ":3306/"+this.base_datos, this.usuario, this.password);
Statement st=cnn.createStatement();
ResultSet rs=st.executeQuery(sql);
ResultSetMetaData mtd=rs.getMetaData();
while(rs.next())
{
combo.addItem(rs.getString(Campo));
}
} catch (ClassNotFoundException | SQLException ex)
{
Logger.getLogger(frmDatos.class.getName()).log(Level.SEVERE, null, ex);
}
finally{
try {
cnn.close();
} catch (SQLException ex) {
Logger.getLogger(dbConexion.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
creamos un JFrame Form que llamaremos frmDatos y 4 objectos : Listbox(lstProductos), comboBox(cmbProductos) , JTable(grProductos) y un boton.
en el evento ActionPerformed escribimos el siguiente codigo.
dbConexion cnn=new dbConexion();
cnn.base_datos="base de datos"; //nombre de la base de datos
cnn.password="12345"; //password de la base de datos
cnn.servidor="servidsor"; //nombre del server
cnn.usuario="usuario"; //es obvio
//enlazar con los controles u objectos;
//listbox
this.lstProductos.setModel(cnn.ListBox_DataSource("select * from productos", "descripcion"));
//combobox
cnn.ComboBox_DataSource("select * from productos", "descripcion", cmbProductos);
//tabla
this.grProductos.setModel(cnn.Grid_DataSource("select * from productos"));
como veran tanto el listbox como jtable uso ListModel y TableModel para retornar ese valor. en el caso del combo como se trabaja directamente con el metodo addItem, solo pase un objeto de tipo combo y listo.
espero que les ayude en sus proyectos.
saludos y hasta la proxima.
Comentarios
Publicar un comentario