Вы находитесь на странице: 1из 6

Jtable + MySQL Query con NetBeans

Bien, luego de jugar un buen rato con NetBeans 6.9, me ha terminado por gustar. de hecho, baje
Eclipse, lo instale lo vi y naaa, me quedo con NetBeans.
Además que su integracion con GlassFish y Tomcat es genial, sin contar el asunto de las integraciones
de las framework y el desarrollo de GUI. Quizás Eclipse haga lo mismo, pero NetBeans me parecio
más intuitivo. Bueno, aca dejo algo de código que he programado, el cual sirve para hacer una consulta
a una tabla en nuestra base de datos MySQL y ed este modo desplegar sus datos en una Jtable.

No es mi deseo enseñar a usar NetBeans, asi que se da por hecho que sabe usarlo básicamente (crear
una Frame, insertar una Table, editar su código.)

Entonces, agregamos una table a la Frame y editamos el codigo de esta Jtable, asegurandonos de que el
Modelo cargará los datos desde unos arrays que nosotros llenaremos (marcado con rojo).

private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();


datos = new javax.swing.table.DefaultTableModel(
this.Datos,
this.Columnas
);
jTable1 = new javax.swing.JTable(datos);
....

} // fin del método initComponents

Ok, en la clase de esta Frame (la he llamado Form2) declaramos...

public class Form2 extends javax.swing.JFrame {


public String[][] Datos;
public String[] Columnas;
samba.usos smb = new samba.usos() ;
private DefaultTableModel datos;

el package samba la que contiene una classe llamada usos (hecha por mi), contiene lo siguiente
(básicamente).

public String[][] ReturnQueryEnArray(String Query, String Srv, String BD, String usr, String pass)
throws Exception
{
//************

BD.MySQL MySQLc = new BD.MySQL() ;


String ConsultaGetUSuarios = Query;
MySQLc.statement = MySQLc.ObtenerConexion(Srv,
BD,usr,pass) ;
MySQLc.resultset = MySQLc.Consultar(MySQLc.statement, ConsultaGetUSuarios);
MySQLc.RegistrosArray(MySQLc.Rcolumnas, MySQLc.Rfilas, MySQLc.resultset);
String ArrayDatos[][] = new String[MySQLc.Rfilas][MySQLc.Rcolumnas];
//**********
int k=0;
int j=0;
while (k <= MySQLc.Rfilas-1)
{

while(j<=MySQLc.Rcolumnas-1)
{
ArrayDatos[k][j] = MySQLc.ArrayDatos[k+1][j+1];
++j ;
}
j=0;
k++;

}
MySQLc.statement.close();
MySQLc.kon.close();
return ArrayDatos;
}//*****************

y el package que me hice, que se llama BD con su classe MySQL contiene:

package BD;

import java.sql.*;

/**
* @author iknos -
* @see lib 1 de un conjunto de librerias para conexión y manipulacion de datos desde MySQL
* eso.
* @version 0.1 LIBS
* WEB: linuxiandolaslackware.blogspot.com
* e-mail: linuxiandola@gmail.com
* Version 0.1.1A
*/
public class MySQL
{
/**
* @see String Retorna el error en String.
*/
public String ERROR ; // RETORNA ERROR STRING
/**
* @see Connection kon, para manipular la conexión con la BD.
*/
public Connection kon ;
public int Rfilas,Rcolumnas ;
public Statement statement ;
public ResultSet resultset ;
public String[] NmCols ;
public String[][] ArrayDatos ;

public MySQL()
{
}

public Statement ObtenerConexion(String Servidor, String BDatos,


String usuario, String passwd) throws Exception
{
/*
Funcion para obtener conexion a la base de datos, retorna "HANDLE" en statement

*/

String login = usuario ;


String password = passwd ;
String url = "jdbc:mysql://"+Servidor+"/"+BDatos ;
Connection conn = null ;
statement = null ; // quitado Statement
ResultSet rs = null ;
try
{
this.ERROR ="OK";
Class.forName("com.mysql.jdbc.Driver").newInstance();

conn = DriverManager.getConnection(url, login, password);

kon = conn ;
statement = conn.createStatement() ;
} catch(Exception err)
{

// si llegó aqui, tenemos error;


this.ERROR ="ERROR EN LA CONEXION ... CLASS MySQL.java "+
"public Statement ObtenerConexion(String Servidor, String BDatos, "+
"String usuario, String passwd) throws Exception - "+ err.toString();
System.err.print("ERROR EN LA CONEXION ... CLASS MySQL.java");
}

return statement ;

}
//*******
public ResultSet Consultar(Statement st ,String query) throws Exception
{
ResultSet rs = null ;
rs = st.executeQuery(query) ;
ResultSetMetaData rsmd = null;
rs.last();
this.Rfilas=rs.getRow();
rs.first();
rsmd = rs.getMetaData();
this.Rcolumnas = rsmd.getColumnCount();
this.NmCols = new String[this.Rcolumnas+1];

for (int i = 0; i <>


{
// la primera columna es la #1.
this.NmCols[i+1] = rsmd.getColumnLabel(i + 1);

rs.first();

return rs ;
}

/**

* @param cols Cantidad de columnas, se puede obtener desde MySQL.Rcolumnas


* @param filas Cantidad de filas, se puede obtener desde MySQL.Rfilas
* @param resultset
* @return siempre retorna 1 ( hasta nuevo aviso)
* @throws Exception
*
*
*/
public int RegistrosArray(int cols, int filas, ResultSet resultset ) throws Exception
{
/*
* @see asdsadsadsa
*/

this.ArrayDatos = new String[filas+1][cols+1];

int k = 1;
int j = 1;
while (k <= filas)
{
while(j<=cols)
{
this.ArrayDatos[k][j] = resultset.getString(j);
++j ;
}
j=1;
k++;
resultset.next() ; // pasar al sigueinte registro
}
return 1;

//Fin clase
}

Siguiento todo esto, en nuestra Main() tenemos que agregar new Form2().setVisible(true);

así.

public static void main(String[] args) throws Exception


{
new Form2().setVisible(true);

y ahora, modificamos el constructor por defecto de la Form2 y lo dejamos asi.


public Form2(
) throws Exception {

this.Datos = smb.ReturnQueryEnArray("Select ID_USUARIO,USUARIO,PASSWD From


USUARIOS",
"localhost", "DomTurnus", "root", "");

String cColumnas[] = { "Title 1", "Title 2", "Title 3"};


this.Columnas = cColumnas;

initComponents(); // llamada a cargar los constructores de la Frame y sus componentes, entre ellos
jTable.
}

Entonces, si en algún momento deseamos agregar datos a la jTable...

Object[] data = new Object[5];


data[0] = "uno";
data[1] = "dos";
data[2] = "tres";
datos.addRow(data);

o mejor aún, actualizar según datos obtenidos desde una Query...

datos.addRow(Datos[1]);

Lógicamente en este caso los datos siempre tienen que ir llegando al array Datos[][].

Bueno, espero se entienda. si no, me avisan, ;)

Вам также может понравиться