En la publicación anterior
vimos que existe un objeto del tipo JTable que nos permite introducir tablas en
nuestras aplicaciones.
Estos objetos son ideales
para mostrar el contenido de una tabla de la base de datos o del resultado de
una consulta.
Recuerda que para extraer
datos de la base de datos realizamos una consulta SQL de tipo SELECT cuyo
resultado se almacena en un objeto ResultSet.
Un ResultSet básicamente es una tabla almacenada en memoria (y
por tanto no visible) Sin embargo, en este post veremos como trasladar el
contenido de un ResultSet a
un objeto del tipo JTable para que el usuario pueda visualizar los datos de
forma cómoda.
El proceso será básicamente
el siguiente:
EJERCICIO GUIADO Nº 1
- Crea un proyecto java
y prepararlo para que pueda acceder a la base de datos AMANUVA:
- Agregar
el archivo sqljdbc4.jar a las bibliotecas del proyecto.
- Declarar
los dos objetos globales: conexion
y sentencia.
- Programar
el método conectarBaseDatos
de forma que el programa acceda a la base de datos y se construyan los
objetos conexion y
sentencia.
- Programar
el evento windowClosing
de la ventana principal de forma que se cierre la conexión.
- Una vez hecho esto,
añade a la ventana principal un objeto del tipo JTable y llámalo tablaTrabajadores.
- Añade en la parte
inferior un botón llamado btnVerTrabajadores. La ventana principal
quedará así:
- Agregaremos al
proyecto un objeto “modelo de tabla” (DefaultTableModel)
llamado detamo que sea global. También añadiremos en el método constructor
una llamada a un método configurarTabla
y programaremos dicho método de la siguiente forma:
Si observas el código,
verás que en el método configurarTabla
se crea un vector de cadenas con seis elementos pero que no contiene nada.
Luego se crea el modelo
de tabla a partir de este vector
vacío.
Y se asigna finalmente a la
tablaTrabajadores.
El resultado de esto es que
la tabla aparecerá vacía y sin títulos (En realidad, como títulos aparecen letras:
A, B, C, etc.).
- Ejecuta el programa
para ver su aspecto:
- Bien, ahora
programaremos el botón btnVerTrabajadores
de forma que al pulsarlo se muestre el contenido de la tabla Trabajadores.
Programe lo siguiente:
Estudiemos el código
detenidamente:
Lo primero que se hace es
extraer el contenido de la tabla Trabajadores
de la base de datos, ejecutando una consulta SQL usando el objeto sentencia. El resultado de dicha
consulta se almacenará en un objeto ResultSet
llamado rs.
ResultSet rs = sentencia.executeQuery("SELECT *
FROM Trabajadores");
Luego se crea el modelo de
la tabla definiendo la cabecera. Observa el código:
String titulosTabla[] = {"DNI",
"Nombres", "Apellidos", "Sueldo", "Fecha
Entrada", "Placa"};
detamo = new DefaultTableModel(null, titulosTabla);
tablaTrabajadores.setModel(detamo);
Como ves, lo que hacemos es
definir un vector de cadenas con los títulos correspondientes a los campos de
la tabla, y luego usamos este vector para crear el modelo de la tabla.
Finalmente asignamos el
modelo creado a la tablaTrabajadores.
- Ejecuta el programa y
observa como al pulsar el botón Ver Trabajadores la cabecera de la tablaTrabajadores pasa
a contener los campos indicados en el vector titulosTabla.
- Ahora ya solo nos
queda recoger todo el contenido del ResultSet
y mostrarlo en la tabla. Para ello, modifique el código del evento actionPerformed del botón btnVerTrabajadores para
que quede como sigue:
Si estudiamos el código,
veremos que se extrae la tabla Trabajadores entera introduciéndola
en un ResultSet llamado rs,
a través de una instrucción SELECT de SQL.
Luego construimos un modelo
de tabla (DefaultTableModel) llamado detamo usando un vector
de títulos, que se corresponde a los campos de la tabla Trabajadores.
Una vez hecho esto, creamos
un vector de seis elementos, correspondiente a los seis datos que contiene cada
fila, y empezamos a recorrer el ResultSet
usando el típico:
while (rs.next()) {
En cada vuelta del bucle
tomamos los valores de la fila del ResultSet
y los almacenamos en el vector (en la posición correspondiente).
Luego se añade el vector
que se ha construido al modelo de la tabla.
Así pues, en cada vuelta se
añadirá un registro más al modelo detamo. Estos registros son
extraídos del ResultSet.
Cuando el bucle ha
terminado, el modelo de la tabla contiene exactamente lo mismo que el ResultSet. Es decir, contiene la
tabla Trabajadores, ya que
este fue el resultado de la consulta SQL ejecutada.
Ya solo tenemos que asignar
el modelo de tabla al JTable correspondiente, es decir, a la tablaTrabajadores,
con lo que esta visualizará los datos del modelo.
Todo este proceso se rodea
con un try...catch para capturar errores inesperados.
- Para entender el
código anterior aquí tienes un pequeño gráfico explicativo:
-
De
la base de datos extraemos datos a un ResultSet.
(Esto se hace ejecutando una consulta SQL de tipo SELECT a través del objeto sentencia).
-
Del
ResultSet extraemos los datos
a un modelo de tabla. (Esto se hace recorriendo el ResultSet y almacenando cada registro en un vector).
-
Almacenamiento
del vector en el modelo de tabla. (Cada vector extraido del ResultSet se inserta como
fila en el modelo de tabla).
-
Se
asigna el modelo de tabla al objeto JTable. (Al hacer esto el objeto JTable
muestra el contenido del modelo).
- Ejecuta el programa y
observa el resultado al pulsar el botón Ver Trabajadores. Como ves, el objeto tablaTrabajadores muestra
entonces el contenido de la tabla Trabajadores:
- Si observas la tabla
verás que la fecha aparece en el formato estándar de almacenamiento:
año-mes-dia hora:min:seg
Mejora este detalle
haciendo los siguientes cambios en el código del botón Ver Trabajadores:
Como se puede observar en
el caso de la fecha, se extrae de la cadena el año, mes y día y se concatenan
en un formato más habitual: día/mes/año.
- Ejecuta el programa y
observa como se muestran las fechas:
CONCLUSIONES:
El proceso a seguir para mostrar una tabla de una base de datos en un
JTable es el siguiente:
-
Realizar una consulta
SELECT para extraer los datos de la tabla de la base de datos. El resultado se
almacenará en un ResultSet.
-
Recorrer el ResultSet
almacenando cada una de sus filas en un vector y luego traspasando este vector
a un modelo de tabla.
-
Una vez que el modelo de
tabla está relleno, asignar el modelo a un JTable.
No hay comentarios.:
Publicar un comentario