OBJETO JTABLE Y COMANDOS SQL EN
MANTENIMIENTO DE DATOS
Objeto de control JTable
Un JTable es un componente visual de java que nos permite dibujar una tabla, de
forma que en cada fila/columna de la tabla podamos poner el dato que queramos;
un nombre, un apellido, una edad, un número, etc.
Como muchos componentes de java, se ha seguido una separación modelo-vista.
La vista es el componente visual que vemos en pantalla, el modelo es una clase
que contiene los datos que luego se verán en pantalla. El modelo de datos
únicamente contiene los datos.
El DefaultTableModel es una clase que implementa TableModel que contiene
todos los métodos necesarios para modificar datos en su interior, añadir filas o
columnas y darle a cada columna el nombre que se desee. Para utilizar
DefaultTableModel debemos importarla y luego declararla para luego poder usar la
clase JTable
El siguiente gráfico intenta mostrar cómo cada componente JTable obtiene siempre
sus datos desde un modelo de tabla.
PROGRAMACION ORIENTADA AL OBJETO
El TableModel se implementa a partir de la clase AbstractTableModel, aunque
existe un modelo de tabla predeterminado denominado la clase DefaultTableModel.
Las propiedad más usada es model que permite definir el numero de filas y
columnas, siendo los métodos más usados: setModel(), que permite vincular un
modelo al obejto Jtable y getRowCount(), devuelve el número de filas en la tabla.
Para la clase DefaultTableModel los métodos más utilizados son: AddRow(), añade
una fila al final del modelo, getRowCount() devuelve el número de filas de la tabla
de datos, getValueAt() devuelve el dato ubicado en la posición fila y columna y
removeRow() elimina una fila del modelo según posición indicada.
Veamos a continuación un programa que hace uso del objeto JTable y llena al
mismo a través de una matriz y agrega una columna a través de un vector.
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class EjemploTabla extends JFrame {
public EjemploTabla() {
super("Tabla de usuarios");
//array bidimencional de objetos con los datos de la tabla
Object[][] data = {{"Daniel", "Villar","Esquiar", new Integer(5), new Boolean(false)},
{"Carlos", "Villar","Patinar", new Integer(3), new Boolean(true)},
{"Karinna", "Villar","Escalar", new Integer(2), new Boolean(false)},
{"Mario", "Diaz","Correr", new Integer(7), new Boolean(true)},
{"Sylvia", "Uribe","Modelar", new Integer(4), new Boolean(false)}};
//array de String's con los títulos de las columnas
Ing. Martín Salcedo Quiñones Página 1
PROGRAMACION ORIENTADA AL OBJETO
String[] columnNames = {"Nombre","Apellido","Pasatiempo","Años de Practica","Soltero(a)"};
//creamos el Modelo de la tabla con los datos anteriores
DefaultTableModel dtm= new DefaultTableModel(data, columnNames);
//se crea la Tabla con el modelo DefaultTableModel
final JTable table = new JTable(dtm);
// una vez creada la tabla con su modelo
// podemos agregar columnas
String[] newColumn= {"Flan","Pastel","Helado","Barquillo","Manzana" };
dtm.addColumn("Postre",newColumn);
//filas
Object[] newRow={"Pepe", "Grillo","Tenis", new Integer(5), new Boolean(false), "Pera"};
dtm.addRow(newRow);
//o modificar una celda en especifico
dtm.setValueAt("Catherine", 1, 1);
//se define el tamaño
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Creamos un JscrollPane y le agregamos la JTable
JScrollPane scrollPane = new JScrollPane(table);
//Agregamos el JScrollPane al contenedor
getContentPane().add(scrollPane, BorderLayout.CENTER);
//manejamos la salida
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
EjemploTabla frame = new EjemploTabla();
frame.pack();
frame.setVisible(true);
}
}
Como podrás observar se tiene una matriz de datos del tipo Object, se crea un
vector, columnNames, para los nombres de cada una de las columnas que será
para el objeto JTable a través de su modelo. Por lo tanto la línea de programación:
DefaultTableModel dtm= new DefaultTableModel(data, columnNames);
Ing. Martín Salcedo Quiñones Página 2
PROGRAMACION ORIENTADA AL OBJETO
Permite que la matriz data sea el contenido del modelo dtm y el vector
columnNames sea los títulos de cada columna del mismo modelo dtm. Luego en
la programación se desea crear una nueva columna con su nombre de columna y
sus datos y esto se logra escribiendo:
String[] newColumn= {"Flan","Pastel","Helado","Barquillo","Manzana" };
dtm.addColumn("Postre",newColumn);
La nueva columna se describe como Postre y los datos de dicha columna se
encuentran en el vector newColumn.
Mantenimiento de Datos usando JTable como vista de datos
Un mantenimiento de datos consiste en grabar datos en una tabla, eliminar datos
correspondientes a un registro de datos, como también modificar datos ya
almacenados. Pero para eliminar datos o modificar datos se supone que los datos
ya existen en la tabla de datos entonces se procederá hacer búsquedas sencillas
para lograr su ubicación y proceder a su eliminación o modificación de datos. En
esta sesión haremos uso del reciente explicado objeto JTable para visualizar los
datos contenidos en una tabla. A continuación vamos a seguir usando la base de
datos de universidad:
1. Vamos a mantener los datos de la tabla de facultad perteneciente a la base
de datos universidad. Establecemos la conexión con la base de datos de
universidad en el entorno de NetBeans.
Ing. Martín Salcedo Quiñones Página 3
PROGRAMACION ORIENTADA AL OBJETO
Volvamos a la pestaña Proyects donde vamos a crear métodos en la clase Acceso,
necesarios para la conexión con la base de datos y el enlace con la tabla de
facultad.
2. Volvamos a la pestaña Proyectos donde vamos a crear métodos para la
conexión con la base de datos y el enlace con la tabla Facultad. Estos
métodos se crearán dentro de una clase llamada Acceso.
Ing. Martín Salcedo Quiñones Página 4
PROGRAMACION ORIENTADA AL OBJETO
Agregamos los paquetes: java.io, java.sql y javax.swing. Este último paquete
es necesario para el uso de los objetos del paquete swing principalmente el
JOptionPane para la visualización de posibles mensajes de error. Estando
dentro de la clase Acceso establecemos las variables conn del tipo
Connection, st del tipo Statement y rs del tipo ResultSet ya descritos y
esplicados en las sesiones anteriores. También definimos las variables bd,
login, password y url.
A continuación creamos el primer método estático denominado Enlace que
devolverá un objeto del tipo Connection. Este método nos ayudará
establecer la conexión con la base de datos universidad. Seguimos a
continuación agregando más métodos a la clase Acceso.
Ing. Martín Salcedo Quiñones Página 5
PROGRAMACION ORIENTADA AL OBJETO
Se crea el método sta que devolverá un objeto del tipo Statement.
Básicamente permite crear el objeto del tipo Statement a partir del objeto
connection a través del método createStatement(). Finalmente se necesita
tener un método denominado EnlFac que permitirá enlazarnos con la tabla
de Facultad aplicando el método executeQuery() estableciendo a través del
comando select a todos los campos de la tabla de Facultad.
Si observamos en cada uno de los métodos se está usando throws
SQLException, esto quiere decir que los métodos usan excepciones
(intercepción de errores) para los errores que se pueden presentar durante la
conexión y acceso de datos.
3. Vamos a diseñar el siguiente formulario al cual llamaremos frmMantFacultad
dando los nombres, correspondientes a cada uno de los objetos de control
dibujados.
Ing. Martín Salcedo Quiñones Página 6
PROGRAMACION ORIENTADA AL OBJETO
btnBuscar
btnVer
btnCerrar
txtCodFac
txtNombre
btnNuevo
btnEliminar
btnModificar
btnGrabar
btnCancelar
tablaFacultad
4. Vamos a proceder a programar, colocando las siguientes líneas de código.
Ing. Martín Salcedo Quiñones Página 7
PROGRAMACION ORIENTADA AL OBJETO
Importamos los paquetes java.sql (para acceder a base de datos),
javax.swing (para el uso de los controles visuales), javax.swing.table para el
manejo de las clases del paquete table y el paquete universidad que
contiene a la clase Acceso con lo cual podremos hacer uso de todos los
métodos que tenga.
Iniciamos la construcción de la clase frmMantFacultad, estableciendo como
variables o atribnbutos conn, st y rs. Como se está utilizando un objeto
JTable se define la variable dtm del tipo DefaulTableModel. En el método
constructor hacemos uso del método activabotones (programación que
veremos luego), se establece un vector o arreglo del tipo String donde se
coloca los títulos que serán de cada una de las columnas del objeto JTable.
A partir del método setColumnIdentifiers indicamos los datos del vector
titulos al objeto dtm y con el método setModel vinculamos el objeto dtm al
Ing. Martín Salcedo Quiñones Página 8
PROGRAMACION ORIENTADA AL OBJETO
objeto JTable denominado tablaFacultad. Los métodos setSize y
setLocation es para establecer el tamaño y la localización del formulario en
la pantalla del computador.
El método activaBotones es para habilitar o inhabilitar el uso de los botones
de comando, esto dependerá en qué circunstancias nos encontremos en la
ejecución de la aplicación de mantenimiento de datos de Facultad. Con el
método limpiarDatos se limpia los cuadros de textos.
Ing. Martín Salcedo Quiñones Página 9
PROGRAMACION ORIENTADA AL OBJETO
En el botón de comando btnBuscar si está habilitado después de dar clic en
dicho botón, se procederá a la conexión con la base de datos, luego en la
variable rs se almacenará los datos provenientes de la tabla de Facultad. En
la variable b se coloca el valor ingresado en el cuadro de texto txtCodEst.
Se define una variable boleana encuentra para manejar la situación de éxito
o fracaso de la búsqueda. En la sentencia while utilizamos el método next
que pertenece al objeto rs, es decir, es un método de la interfaz ResulSet. El
método next devuelve verdadero si encuentra la primera fila de información,
las siguientes veces se desplaza en cada registro almacenado en el rs. La
sentencia if que se encuentra dentro del while, su condición lógica se hará
verdadero cuando encuentre el código de facultad buscado, haciendo que
los cuadros de textos se muestren los demás datos, es entonces que la
variable encuentra recién se hace verdadero.
El botón de comando btnVer (Ver Lista de Facultades), consiste en aumentar
el tamaño del formulario para visualizar el objeto JTable. Posteriormente se
establece la conexión con la base de datos y en la variable rs se almacena
los datos provenientes de la tabla de Facultad. Se define un vector
Ing. Martín Salcedo Quiñones Página 10
PROGRAMACION ORIENTADA AL OBJETO
denominado datos de tamaño 2 elementos del tipo String que servirá colocar
los datos de una fila para luego agregarlo al objeto dtm que está vinculado al
objeto JTable llamado tablaFacultad. Pero antes de agregarlo debemos
asegurarnos que no exista fila alguna de datos en el modelo dtm y por ende
en la tablaFacultad. El bucle de la sentencia while permite colocar en cada
elemento del arreglo los datos extraídos de una fila que almacena el objeto
rs, esto es posible ya que el método getString, indicando la posición de la
columna, podemos obtener el dato de la fila actual.
Con el método addRow logramos crear una fila con los datos del vector
datos en el objeto dtm y como está vinculado a la tablaFacultad entonces se
podrá ver los registros agregados.
Para el botón de comando btnNuevo, limpiamos los cuadros de textos con el
método limpiarObjetos. Se habilita el cuadro de texto txtCodFac y se envía
el cursor al cuadro de texto txtCodFac. Se inhabilta los botones de comando
a excepción de grabar ya que estamos en el momento de ingresar nuevos
datos y proceder a almacenar.
Ing. Martín Salcedo Quiñones Página 11
PROGRAMACION ORIENTADA AL OBJETO
En el botón de comando btnGrabar se inicia visualizando un mensaje de
confirmación para proceder a grabar, esto se logra usando el método
showConfirmDialog de la clase JOptionPane. Si la respuesta es Sí
entonces la sentencia if su condición lógica se hará verdadera y por lo tanto
establecemos conexión con la base de datos universidad, pasamos los datos
ingresados a variables como cod y nom. En la variable comando
establecemos la instrucción con el comando INSERT para luego usar el
método executeUpdate quien procederá a grabar los datos. Posteriormente
se procede a cerrar la conexión con el método close del objeto connection
conn.
Ing. Martín Salcedo Quiñones Página 12
PROGRAMACION ORIENTADA AL OBJETO
En el botón de comando btnEliminar, también se procede a través de un
mensaje confirmar si procede la eliminación de los datos del Facultad. Si la
respuesta es afirmativa se procede a conectarse a la base de datos y en la
variable de memoria cod se almacenada el código de la facultad ingresado a
través del cuadro de texto txtCodFac. Se construye la instrucción usando el
comando DELETE, luego ejecutamos la eliminación física haciendo que el
campo idFacultad sea igual a cod y luego se cierra la conexión con la base
de datos.
Ing. Martín Salcedo Quiñones Página 13
PROGRAMACION ORIENTADA AL OBJETO
En el botón de comando btnModificar, al igual que de grabar o eliminar se
procede a confirmar a través de un mensaje si se procede a la modificación
de datos. Una vez salvados los datos ingresados en los cuadros de textos en
variables de memoria se prepara la instrucción en la variable de memoria
comando. Usamos el comando UPDATE para actualizar los datos. Se
procede a ejecutar el comando con el método executeUpdate y se cierra la
conexión con el método close.
En el botón de comando Cancelar, luego de dar respuesta afirmativa se
procede a limpiar los cuadros de textos, habilita el cuadro de texto txtCodFac
Ing. Martín Salcedo Quiñones Página 14
PROGRAMACION ORIENTADA AL OBJETO
para su uso y se vuelve a su estado inicial la habilitación de los botones de
comando.
El botón de comando btnCerrar, con el método dispose se cierra la ventana
o formulario.
5. Procedemos a ejecutar el formulario, seleccionando Ejecutar Archivo.
6. Observamos el formulario ejecutado.
Ing. Martín Salcedo Quiñones Página 15
PROGRAMACION ORIENTADA AL OBJETO
7. Al dar clic en el botón de comando Nuevo podemos proceder a ingresar
datos. Una vez ingresado damos clic en el botón de comando Grabar.
8. Se muestra una confirmación para la grabación de datos.
Ing. Martín Salcedo Quiñones Página 16
PROGRAMACION ORIENTADA AL OBJETO
USO DE COMANDOS SQL PARA MANTENIMIENTO DE
DATOS DE VARIAS TABLAS
Los objetos Swing Menus
En todo desarrollo de un proyecto de un sistema informático se debe construir
menús que permita al usuario interaccionar con las opciones del sistema.
Tenemos el JmenuBar que permite iniciar el diseño del menú, Se crea por defecto
un objeto Jmenu que permitirá a partir de este crear las opciones, las cuales se
crearán con los objetos JmenuItem.
Ing. Martín Salcedo Quiñones Página 17
PROGRAMACION ORIENTADA AL OBJETO
No es mi intención detallar las distintas clases que tenemos para usar en el diseño
de un menú, pero si deseas conocer más sobre los Swing Menus, pueden revisar
las sesiones 10 y 11 del curso de Programación Visual I.
Mantenimiento de datos usando varias tablas
Esta sesión abarca el desarrollo de un mantenimiento de datos usando más de una
tabla
Siguiendo la sesión anterior haremos uso de la base de datos universidad de
MySql, Usar varias tablas no implica que se deba hacer mantenimiento de datos a
todas a la vez. La base de datos de universidad ya tiene la tabla de Facultad y la
tabla de Escuela. Para hacer el mantenimiento de datos de la tabla de Escuela
necesitaremos saber qué facultades están disponibles.
Vamos a proceder a realizar el mantenimiento de la tabla de Escuela:
1. Establecemos la conexión con la base de datos universidad.
Ing. Martín Salcedo Quiñones Página 18
PROGRAMACION ORIENTADA AL OBJETO
2. Creamos un formulario denominado frmPrincipal donde diseñaremos un
menú.
3. Diseñamos el siguiente formulario que se denominará frmMantEscuela.
Ing. Martín Salcedo Quiñones Página 19
PROGRAMACION ORIENTADA AL OBJETO
txtCodEsc
btnBuscar
btnVer
btnCerrar
txtNom
cboFac
btnNuevo
btnEliminar
btnModificar
btnGrabar
btnCancelar
tablaEscuela
4. Vamos a utilizar una vista para mostrar los datos de la tabla de Escuela en el
objeto JTable. Estando en la ficha de Prestaciones en la carpeta Vistas
damos clic botón derecho con el mouse y seleccionamos Crear Vista.
Ing. Martín Salcedo Quiñones Página 20
PROGRAMACION ORIENTADA AL OBJETO
A continuación se visualiza una ventana para definir la vista denominada
v_escuelasprofesionales. Luego damos clic en el botón de comando Aceptar.
En la ficha de Prestaciones observamos la siguiente estructura.
Ing. Martín Salcedo Quiñones Página 21
PROGRAMACION ORIENTADA AL OBJETO
5. Vamos a proceder a agregar métodos en la clase Acceso que utilizaremos
para el mantenimiento de datos de la tabla de Escuela.
El método EnlEsc es para obtener los registros de datos de la tabla de
Escuela.
El método obtenerCodFac es para obtener el código de facultad dado el
nombre de la facultad. Esto permitirá para la inserción o modificación de
datos en la tabla de Escuela.
Ing. Martín Salcedo Quiñones Página 22
PROGRAMACION ORIENTADA AL OBJETO
El método obtenerNomFac es para obtener el nombre de la facultad dado el
código de facultad.
El método obtenerFacultades es para encontrar todos los nombres de las
facultades y poder llenar al objeto JComboBox cboFac.
El método obtenerVistaEscuelas permite conseguir los registros de la vista
v_escuelasprofesionales.
6. Veamos a continuación la programación que tendrá el formulario
frmMantEscuela.
Ing. Martín Salcedo Quiñones Página 23
PROGRAMACION ORIENTADA AL OBJETO
a. Agregar los paquetes necesarios para el desarrollo de la aplicación.
b. Definir los atributos o variables a usar en los distintos métodos que forma
la clase frmMantEscuela.
Se utilizarán dos modelos uno para el JTable donde se visualizará la vista
diseñada anteriormente y otro modelo para el JComboBox que mostrará
las facultades existentes en la tabla de Facultad.
c. El método constructor debe quedar de la siguiente manera:
Ing. Martín Salcedo Quiñones Página 24
PROGRAMACION ORIENTADA AL OBJETO
La mayor novedad en la programación del constructor es el llenado del
objeto cboFac usando el objeto rs y la visualización de los datos en el
objeto JTable usando la vista diseñada.
d. Procedemos a construir los métodos activabotones() y limpiarObjetos().
Ing. Martín Salcedo Quiñones Página 25
PROGRAMACION ORIENTADA AL OBJETO
e. El botón de comando Buscar es para encontrar una escuela profesional
dado el valor de su código en el cuadro de texto txtCodEsc.
En la búsqueda es necesario tomar el código de facultad y encontrar el
nombre para que sea mostrado en el objeto cboFac.
f. En el botón de comando Ver Lista de Escuelas se visualizará los datos de
la tabla Escuela a través de la vista diseñada.
Ing. Martín Salcedo Quiñones Página 26
PROGRAMACION ORIENTADA AL OBJETO
g. En los botones de comando Cerrar y Nuevo colocaremos el siguiente
código:
h. En el botón de comando Eliminar haremos uso del comando SQL
DELETE con la cláusula WHERE para remover un registro de datos.
Ing. Martín Salcedo Quiñones Página 27
PROGRAMACION ORIENTADA AL OBJETO
i. Para el botón de comando Cancelar es para abortar el proceso actual
que estemos haciendo en la interacción con el formulario.
j. Para el botón de comando Modificar hacemos uso del comando SQL
UPDATE con la cláusula WHERE para actualizar un registro de datos.
Ing. Martín Salcedo Quiñones Página 28
PROGRAMACION ORIENTADA AL OBJETO
En el proceso de modificación de datos dado que la facultad se
selecciona de un objeto JComboBox (cboFac), éste dato es el nombre de
la facultad y para modificar los datos se necesita el código de la facultad.
Es por ello la imperiosa necesidad de hacer uso del método
obtenerCodFac para encontrar el código de la facultad dado el nombre.
Lo mismo sucederá cuando se haga el proceso de grabación de datos.
k. Para el botón de comando grabar hacemos uso del comando SQL
INSERT con la cláusula INTO para insertar un nuevo registro de datos.
Ing. Martín Salcedo Quiñones Página 29
PROGRAMACION ORIENTADA AL OBJETO
7. Vamos a proceder a ejecutar el formulario desde el menú de una ventana
denominada frmPrincipal.
8. Inicialmente se mostrará la ventana de mantenimiento de datos de Escuelas
de la siguiente forma:
Ing. Martín Salcedo Quiñones Página 30
PROGRAMACION ORIENTADA AL OBJETO
Si damos clic en el botón de comando Ver Lista de Escuelas se visualizará lo
siguiente:
Ing. Martín Salcedo Quiñones Página 31