lunes, 16 de agosto de 2010

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


5 comentarios:

Anónimo dijo...

excelente :)

Anónimo dijo...

hola, yo estoy utilizando netbeans 6.5 por lo q es visual, estoy creando una APLICACION WEB de registro de estudiantes ya tengo todas las interfaces y la base de datos en MySQl PERO nose como guardar desde el registro a la base de datos y mostrar estos datos desde la base al registro. me podrias ayudar??? o tienes un ejemplo q realice esto?? t agradeceria mucho la ayuda pues es mi trabajo de grado.. att,kristall

Nocturnus dijo...

hola kristall.

alguna direccion de correo para enviarte un ejemplo.

aqui tengo un jsp que ingresa "matriculas", es bàsico pero funcional.

Nocturnus dijo...

si quieres te envio el jsp completo.

para insertar...

String sql = "INSERT INTO `ALUMNOS_MATRICULADOS` (`RUT`, `NOMBRES`, `APELLIDO_PATERNO`, "
+ "`APELLIDO_MATERNO`, `EMPRESA`, `ID_EMPRESA`, `EMAIL`, `TELEFONO`, `CELULAR`, "
+ "`CURSO`, `NIVEL`, `HORARIO`, `ID_CURSO`, `ID_NIVEL`, `ID_HORARIO`, "
+ "`FECHA_INSCRIPCION`) VALUES ('"+ rut +"', '"+ nombres +"', '"+ apaterno +"', '"+ amaterno +"', "
+ "'"+ empresa +"', '"+ ID_EMPRESA +"' , '"+ correo +"', '" + telefono + "', '"+ celular +"', '"+ curso +"', '"+ nivel +"', '"+ horario +"', "
+ "'"+ ID_CURSO + "', '"+ ID_NIVEL +"', '"+ ID_HORARIO +"', '2011-08-09')";

MySQL.statement.executeUpdate(sql);

Anónimo dijo...

hola NOCTURNUS gracias por contestar
mi correo es blue_yny@hotmail.com y de veras q me ayudarias mucho con un ejemplo resuelto. trate de enviarte un correo por tu perfil pero no pude intentare otra vez, espero q leas ste mensaje att. Krystall