Download universidad nacional del santa facultad de ingenieria eap ingenieria

Document related concepts
no text concepts found
Transcript
UNIVERSIDAD NACIONAL DEL SANTA
FACULTAD DE INGENIERIA
E.A.P INGENIERIA DE SISTEMAS E INFORMATICA
MANUAL DE TECNOLOGIA CLIENTE - SERVIDOR CON JAVA
Ing. Mirko Manrique Ronceros
Primera Edición
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
INDICE
Introducción
02
Programación Cliente – Servidor
03
Herramientas para la Programación Cliente – Servidor
04
Arquitectura Cliente – Servidor
06
Conectividad a la Base de Datos con JDBC
08
Uso del Entorno Netbeans para conexión a Base de Datos
16
Acceso de la base de datos y el paquete java.sql
26
Objeto de control JTable en mantenimiento de datos
38
Swing, Menús y mantenimiento de datos usando varias tablas
50
Mantenimiento de datos usando procedimientos almacenados
66
Transacciones y Búsquedas con base de datos
77
consulta de datos usando el objeto JTable
90
Ing. Mirko Manrique Ronceros
Página 2 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
INTRODUCCION
La tecnología llamada Cliente /Servidor es actualmente utilizada en casi todas las
aplicaciones administrativas e Internet/Intranet. Bajo este esquema, un servidor es
un ordenador remoto, en algún lugar de una red, que proporciona información según
se le solicite. Mientras que un cliente funciona en su computadora local, se comunica
con el servidor remoto y pide a éste información.
Los sistemas Cliente-Servidor pueden ser de muchos tipos, pues esto depende
principalmente de las aplicaciones instaladas en el propio servidor. Entre otros,
existen: servidores de impresión mediante los cuales los usuarios comparten
impresoras, servidores de archivos con los que los clientes comparten discos duros,
servidores de bases de datos donde existe una única base de datos que es consultada
por los clientes y puede o no ser modificada por ellos y servidores Web que utilizan
también la tecnología Cliente/Servidor, aunque añaden aspectos nuevos y propios a la
misma.
Los servidores web quizás actualmente son los de mayor importancia. Un servidor
web es aquel que permite a los clientes compartir datos, documentos y multimedia en
formato web. Aunque parte de la tecnología Cliente/Sevidor, el servidor Web aporta
ventajas adicionales a un servidor tradicional.
El
presente documento Tecnología
Cliente
Servidor
con Java es
un
manual
orientado al conocimiento del lenguaje Java, utilizando como entorno de desarrollo
NetBeans
y un gestor de bases de datos de preferencia MySql. En este manual se
hará una presentación y estudio de las interfaces visuales a través de Java como
lenguaje de programación. El manual tendrá 03 temas fundamentales, la primera es
el “Acceso de Datos”, la segunda es “Mantenimiento de Datos” y la tercera
“Consultas e Informes”.
Ing. Mirko Manrique Ronceros
Página 3 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Programación Cliente - Servidor
Java es un nuevo lenguaje de programación, como tantos otros. Así que uno se pregunta el
por qué del revuelo que se ha formado con su aparición. La respuesta no es inmediatamente
obvia si se observa el asunto desde el punto de vista de la programación tradicional, porque
aunque resuelve algunos de los problemas típicos de este tipo de programación, lo que
verdaderamente es importante es que también resuelve los problemas que se generan en
Internet, en la Telaraña Mundial, en el World-Wide-Web, en la Web. Internet es un sistema
Cliente-Servidor gigante. La idea primaria de un sistema cliente-servidor es que debe haber
un sitio donde se centraliza la información, que se desea distribuir bajo demanda a un
conjunto de personas o máquinas.
La clave de este concepto radica en que si se produce un cambio en la información del
sistema central, inmediatamente es propagada a los receptores de la información, a la
parte cliente. Luego, el concepto básico es muy simple; el problema se presenta cuando
hay solamente un servidor que tiene colgados a muchos clientes, en que el rendimiento
general del sistema decrece de forma exponencial al aumento del número de clientes. El
funcionamiento de la Web sigue este mismo principio. Inicialmente, se solicita una
información a un servidor y éste envía de vuelta un fichero que será interpretado por el
navegador (el cliente) que lo formateará para visualizarlo en la máquina cliente. El
navegador fue el primer paso adelante en la expansión de Internet, ya que permitía
visualizar un mismo fichero en plataformas diferentes sin hacerle cambio alguno; pero su
finalidad principal es la visualización de ficheros, no la interactividad con el usuario, ni la
posibilidad de ejecutar programas en la parte del usuario, en la parte cliente del sistema.
Java está siendo continuamente extendido para proporcionarle nuevas características y
librerías que resuelven elegantemente problemas que son muy difíciles en la programación
tradicional como el acceso a bases de datos, el uso de multihilo, la programación de redes y
la programación distribuida, y además porque Java, a través de los applets, permite la
programación de la parte cliente. Un applet es un miniprograma que corre solamente bajo
un navegador y es descargado automáticamente como parte de una página Web, al igual
que cualquier gráfico, y cuando se activa, ejecuta un programa. Este es el interés,
proporciona una forma a través de la cual se puede distribuir software al cliente desde el
servidor, en el momento en que el cliente necesite ese software, y no antes, con lo cual
siempre tendrá el cliente la última versión de ese software, se actualice cuando se actualice.
Además, tal como está diseñado Java, el programador necesita crear su programa una sola
vez, y ya estará listo para ser ejecutado en todas las plataformas que dispongan de un
navegador con soporte Java.
Ing. Mirko Manrique Ronceros
Página 4 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Herramientas para la Programación Cliente - Servidor:
Tenemos:
Sockets
–
Implementados en todos los sistemas operativos modernos.
–
Comunican dos procesos que pueden estar alojados en dos máquinas diferentes.
–
El cliente debe conocer la máquina y el puerto donde se ubica el servidor.
–
Se debe establecer un protocolo cliente/servidor para el correcto funcionamiento de la
aplicación.
RPCs
–
Basado en Sockets. Abstrae al programador del uso de Sockets.
–
Sigue siendo necesaria la distinción del código cliente y del código servidor.
Alternativas para desarrollo de aplicaciones:
1. CORBA:
Es necesario que exista una versión de CORBA para la plataforma donde se quiere
implementar.
Ventajas:
●
Soporta múltiples plataformas y lenguajes de programación.
●
Dispone de una gran cantidad de servicios
●
Definida por un organismo serio e independiente
Incovenientes:
●
Complejidad en el desarrollo
●
Lentitud para adaptarse
●
Pocas implementaciones libres.
2. NET
Ventajas:
● Soporta múltiples plataformas
● Fácil proceso de desarrollo (Visual Studio .Net)
● Entorno Windows muy extendido.
● Buen marketing
Inconvenientes:
● Exclusiva del sistema operativo Windows
● Propia de Microsoft
● Casi ninguna implementación libre.
Ing. Mirko Manrique Ronceros
Página 5 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
3. JAVA EE
Ventajas:
● Soporta para múltiples plataformas y sistemas operativos
● Avalado por múltiples empresas (SUN, IBM, ORACLE, etc)
● Competitividad
● Soluciones Libres
Inconvenientes:
● Exclusivo para el lenguaje Java
● Complejidad relativa en el desarrollo de aplicaciones
● No existe un entorno de desarrollo fijo.
Arquitectura Cliente Servidor:
Modelo Lógico:
● Gestor de presentación: Muestra la interface del usuario.
● Lógica de Presentación: Establece que se debe mostrar al usuario.
● Lógica de la Aplicación: Funcionalidad de la aplicación.
● Lógica
de
Negocio:
Funcionalidad
de
la
empresa,
común
para
todas
las
aplicaciones.
● Lógica de los datos: Definición lógica de los datos (vistas, tablas, tipos de datos,
claves, etc.)
● Gestor de Datos: Encargada de escribir y acceder a la base de datos.
Modelo Físico:
–
1 capa (Sistema monolítico, no es realmente una aplicación C/S)
Ing. Mirko Manrique Ronceros
Página 6 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
–
2 capas (Cliente Servidor tradicional)
–
3 capas (Cliente – Lógica Negocio – Datos)
Tecnología Cliente–Servidor con Java
El modelo de 3 capas esta basado en objetos:
–
Clientes: Que son aplicaciones propias
–
Lógica de Negocio y de Datos: Objetos distribuidos
También está basado en la WEB:
–
Clientes: Navagadores
– Lógica de Negocio y de Datos: Generación dinámica de contenidos en lenguaje HTML,
XML, xHTML.
Ing. Mirko Manrique Ronceros
Página 7 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
CONECTIVIDAD DE LA BASE DE DATOS CON JDBC
¿Qué es un JDBC?
La conectividad de la base de datos de Java (JDBC , Java Database Connectivity) es un
marco de programación para los desarrolladores de Java que escriben los programas que
tienen acceso a la información guardada en bases de datos, hojas de calculo, y archivos
"planos". JDBC se utiliza comúnmente para conectar un programa del usuario con una base
de datos por “detrás de la escena”, sin importar qué software de administración o manejo de
base de datos se utilice para controlarlo.
Para la gente del mundo Windows, JDBC es para Java lo que ODBC es para Windows.
Windows en general no sabe nada acerca de las bases de datos, pero define el estándar
ODBC consistente en un conjunto de primitivas que cualquier driver o fuente ODBC debe
ser capaz de entender y manipular. Los programadores que a su vez deseen escribir
programas para manejar bases de datos genéricas en Windows utilizan las llamadas ODBC.
Con JDBC ocurre exactamente lo mismo: JDBC es una especificación de un conjunto de
clases y métodos de operación que permiten a cualquier programa Java acceder a sistemas
de bases de datos de forma homogénea. Lógicamente, al igual que ODBC, la aplicación de
Java debe tener acceso a un driver JDBC adecuado. Este driver es el que implementa la
funcionalidad de todas las clases de acceso a datos y proporciona la comunicación entre el
API JDBC y la base de datos real.
ODBC es un interfaz escrito en lenguaje C, que al no ser un lenguaje portable, haría que las
aplicaciones Java también perdiesen la portabilidad. Y además, ODBC tiene el inconveniente
Ing. Mirko Manrique Ronceros
Página 8 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
Tecnología Cliente–Servidor con Java
E.A.P. Sistemas e Informática
de que se ha de instalar manualmente en cada máquina; al contrario que los drivers
JDBC,
que
al
estar
escritos
en
Java
son
automáticamente
instalables, portables y
seguros. La conectividad de bases de datos de Java se basa en sentencias SQL, por lo que
se hace imprescindible un conocimiento adecuado de SQL para realizar cualquier clase de
operación de bases de datos. Aunque, afortunadamente, casi todos los entornos de
desarrollo
Java
ofrecen
componentes
visuales
que
proporcionan
una
funcionalidad
suficientemente potente sin necesidad de que sea necesario utilizar SQL, aunque para usar
directamente el JDK se haga imprescindible
Acceso a base de datos con JDBC
A continuación vemos los modelos diferentes de acceso a base de datos:
Modelo de 2 capas
El presente modelo se basa en que la conexión se presenta entre la aplicación Java o el
applet (que se ejecuta en el navegador), se conectan directamente a la base de datos.
Como sabemos en Java se puede tener dos tipos de aplicaciones: la aplicación Java
propiamente dico y una aplicación applet, esta última que se ejecuta en un navegador.
Observamos en la figura que el driver o controlador JDBC debe residir en la computadora
local. La base de datos puede estar en cualquier otra máquina y se accede a ella
mediante la red. Esta es la configuración de típica Cliente/Servidor: el programa cliente
envía instrucciones SQL a la base de datos, ésta las procesa y envía los resultados de
vuelta a la aplicación
Modelo de 3 capas
El presente modelo, las instrucciones son enviadas a una capa intermedia entre Cliente y
Servidor, que es la que se encarga de enviar las sentencias SQL a la base de datos y
recoger el resultado desde la base de datos. En este caso el usuario no tiene contacto
directo, ni a través de la red, con la máquina donde reside la base de datos.
Ing. Mirko Manrique Ronceros
Página 9 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Comparando con el modelo anterior, se observa que el driver o controlador JDBC se
encuentra junto al servidor de aplicaciones, esto hace que la máquina del cliente no se
preocupe por instalar el controlador. El nivel intermedio mantiene en todo momento el
control del tipo de operaciones que se realizan contra la base de datos.
Clasificación de los Drivers
El driver JDBC puede pertenecer a una de las siguientes categorías:
Puente JDBC-ODBC
Utilizada por Sun inicialmente para popularizar JDBC y consiste en aprovechar todo lo
existente, estableciendo un puente entre JDBC y ODBC. Este driver convierte todas las
llamadas JDBC a llamadas ODBC y realiza la conversión correspondiente de los resultados.
Ing. Mirko Manrique Ronceros
Página 10 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
La ventaja de este driver, que se proporciona con el JDK, es que Java dispone de acceso
inmediato a todas las fuentes posibles de bases de datos y no hay que hacer ninguna
configuración adicional aparte de la ya existente. La desventaja está en que es lenta y no
será posible ser usada en el sistema operativo Linux.
Java Binario
Este driver se salta la capa ODBC y habla directamente con la librería nativa del
fabricante del sistema DBMS (como pudiera ser DB-Library para Microsoft SQL Server o CTLib para Sybase SQL Server). Este driver es un driver
100% Java pero aún así
necesita la existencia de un código binario (la librería DBMS) en la máquina del cliente,
con las limitaciones y problemas que esto implica.
100% Java/Protocolo Nativo
Este driver es realizado completamente en Java que se comunica con el servidor DBMS
utilizando el protocolo de red nativo del servidor. De esta forma, el driver no necesita
intermediarios para hablar con el servidor y convierte todas las peticiones JDBC en
peticiones de red contra el servidor. La ventaja de este tipo de driver es que es una solución
100% Java y, por lo tanto, independiente de la máquina en la que se va a ejecutar
el programa
Ing. Mirko Manrique Ronceros
Página 11 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
La única desventaja de este tipo de drivers es que el cliente está ligado a un servidor
DBMS concreto.
100% Java/Protocolo Independiente
Requiere la presencia de un intermediario en el servidor. En este caso, el driver JDBC
hace las peticiones de datos al intermediario en un protocolo de red independiente del
servidor DBMS. El intermediario a su vez, que está ubicado en el lado del servidor, convierte
las peticiones JDBC en peticiones nativas del sistema DBMS. La ventaja de este método es
inmediata: el programa que se ejecuta en el cliente, y aparte de las ventajas de los drivers
100% Java, también presenta la independencia respecto al sistema de bases de datos que
se encuentra en el servidor.
Cargar el controlador JDBC
Para trabajar con el API JDBC se tiene que importar el paquete java.sql, tal y como se
indica a continuación:
import java.sql.*;
En este paquete se definen los objetos que proporcionan toda la funcionalidad que se
requiere para el acceso a bases de datos. El siguiente paso después de importar el paquete
java.sql consiste en cargar el controlador JDBC, es decir un objeto Driver específico para
una base de datos que define cómo se ejecutan las instrucciones para esa base de datos
en particular.
Hay varias formas de hacerlo, pero la más sencilla es utilizar el método forName() de la
clase Class:
Class.forName("Controlador JDBC");
Para el caso particular del controlador para MySQL, Connector/J, se tiene lo siguiente:
Class.forName("com.mysql.jdbc.Driver");
Ing. Mirko Manrique Ronceros
Página 12 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Debe tenerse en cuenta que el método estático forName() definido por la clase Class genera
un objeto de la clase especificada. Cualquier controlador JDBC tiene que incluir una parte
de iniciación estática que se ejecuta cuando se carga la clase. En cuanto el cargador de
clases carga dicha clase, se ejecuta la iniciación estática, que pasa a registrarse como un
controlador JDBC en el DriverManager.
Es decir, el siguiente código:
Class.forName("Controlador JDBC");
es equivalente a:
Class c = Class.forName("Controlador JDBC");
Driver
driver
=
(Driver)c.newInstance();
DriverManager.registerDriver(driver);
Algunos controladores no crean automáticamente una instancia cuando se carga la clase. Si
forName() no crea por sí solo una instancia del controlador, se tiene que hacer esto de
manera explícita:
Class.forName("Controlador JDBC").newInstance();
De nuevo, para el Connector/J:
Class.forName("com.mysql.jdbc.Driver").newInstance();
En toda aplicación de bases de datos con MySQL es indispensable poder establecer la
conexión al servidor para posteriormente enviarle las consultas. Los programas en Java
no son la excepción. El siguiente código nos servirá para verificar que podemos
establecer una conexión a nuestra base de datos transportes
import
java.sql.*;
public
class
TestConnection
{
Static String bd=”transportes”; static String login=”bingo”; static String
password=”hola”;
static String url=”jdbc:mysql://localhost/”+bd;
public static void mian(String[ ] args)throws IOException
{
Connection conn = null;
try
{
Class.forName(“com.mysql.jdbc.Driver).newInstance();
conn
=
DriverManager.getConnection(url,login,password);
if
(conn != null)
{
System.out.println(“Conexión a la base de datos ”+bd+”... OK”);
conn.close();
}
Ing. Mirko Manrique Ronceros
Página 13 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
Tecnología Cliente–Servidor con Java
E.A.P. Sistemas e Informática
}
catch(SQLException ex)
{
System.out.println(ex);
}
catch(ClassNotFoundException ex)
{
System.out.println(ex);
}
}
}
En esta programación se inicia importanto el paquete sql perteneciente a java. El signo
del asterisco significa que el programa puede hacer uso de culaquier clase contenida en el
paquete
sql.
Se
construye
la
clase
TextConnection,
estableciendo
4
variables
o
atributos de tipo String donde se almacena el nombre de la base de datos, el login, la
contraseña o password y el url.
Una vez en el método principal llamado main se declara la variable objeto conn y a través de
la instrucción try se busca proteger la ejecución ante posibles errores (lo que se denomina
manejo de excepciones).
Con la instrucción: Class.forName(“com.mysql.jdbc.Driver).newInstance();, se establece el
driver para el gestor de base de datos MySql. Luego en la siguiente línea de
programación se establece la conexión con la base de datos a través del método
getConnection perteneciente a la clase DriverManager. A través de la sentencia selectiva if
se evalúa el éxito de la conexión, por lo tanto, si la variable conn es diferente de null
significa que se logró la conexión, caso contrario se mostrará mensajes de error, gracias a la
instrucción catch.
A continuación se listan algunas de las salidas que se pueden obtener al ejecutar el
programa anterior:
[blueman@casita]$ java TestConnection
Conexión a base de datos jdbc:mysql://localhost/agendita ... Ok
(significa: Todo funciona bien)
[blueman@casita]$
java
TestConnection
java.lang.ClassNotFoundException:
com.mysql.jdbc.Driver
(Seguramente no se ha puesto la ruta al archivo connector.jar en la variable de ambiente
CLASSPATH)
[blueman@casita]$ java TestConnection
java.sql.SQLException: Invalid authorization specification: Access denied for
user: 'bingo@localhost' (Using password: YES)
Ing. Mirko Manrique Ronceros
Página 14 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
(El login o el password proporcionados no nos permiten el acceso al servidor)
[blueman@casita]$ java TestConnection java.sql.SQLException: No suitable driver
(Probablemente se ha escrito de forma incorrecta el URL para la base de datos)
[blueman@casita]$ java TestConnection
java.sql.SQLException: General error: Access denied for user: 'bingo@localhost' to
database 'transportes'
(Probablemente se ha escrito de manera incorrecta el nombre de la base de datos)
Ing. Mirko Manrique Ronceros
Página 15 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
USO DEL ENTORNO DE NETBEANS PARA LA
CONEXIÓN DE BASE DE DATOS
Conector a la base de datos
Una aplicación en Java para que logre comunicarse con una base de datos usando la API JDBC,
se requiere de un conector. Ese conector es específico para el manejador de base de datos y
viene en la forma de un archivo “.jar” o “.zip”. El conector para la base de datos MySQL, está
en el archivo:
mysql-connector-java-3.1.XX.jar
Existe versiones superiores como la versión 5.0 para dicho conector. NetBeans nos permite la
tarea de conectar una aplicación a una base de datos
Conexión de una Aplicación a una base de datos creada en MySql
Para conectar a una aplicación a una base de datos, se requiere:
1.
Agregarle a NetBeans el conector como una biblioteca o librería. Esto permite que el
conector este disponible para los proyectos.
2.
Agregarle a un proyecto el conector. Esto permite que la aplicación se pueda conectar a la
base de datos.
A continuación procedemos agregarle a NetBeans un conector a una base de datos MySql:
a.
Seleccione la opción Tools/Libraries de la barra de menú del entorno de NetBeans.
Ing. Mirko Manrique Ronceros
Página 16 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
b.
Tecnología Cliente–Servidor con Java
Se visualiza un
cuadro
de
diálogo
que
permite
administrar
las
librerías
o
bibliotecas
de
NetBeans. En la
ventana, al lado
izquierdo
se
observa
las
librerías
agregadas
a
NetBeans.
Del
lado
derecho
aparece el nombre de la biblioteca y la trayectoria del archivo con la biblioteca. Para
agregar el conector a MySQL a NetBeans presione el botón de comando New Library ...
a. Se mostrará un cuadro de diálogo donde se establecerá el nombre que daremos al
conector, como por ejemplo MySQL y luego damos click en el botón de comando OK.
b. Se
cierra
diálogo
y
el
cuadro
volvemos
de
a
la
ventana anterior donde se
observará la nueva librería
MySQL.
Posteriormente
procedemos a dar clic en el
botón
de
comando
Add
JAR/Folder ...
Ing. Mirko Manrique Ronceros
Página 17 de 100
c.
Universidad Nacional del Santa
Facultad de Ingeniería
Tecnología Cliente–Servidor con Java
E.A.P. Sistemas e Informática
Buscamos el conector mysql-connector-java-3.1.7- bin.jar
d. Al dar clic en Add JAR/Folder volvemos a la ventana anterior. Cabe señalar que en las
últimas versiones de NetBeans ya existe una librería o biblioteca para la conexión a una
base de datos de MySql, denominada MYSQL JDBC Driver.
Damos click en el botón de comando Ok y vamos a crear un proyecto:
1) Seleccionamos la opción File/New Proyect de la barra de menú del entorno de
NetBeans.
Ing. Mirko Manrique Ronceros
Página 18 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
2) Seleccionamos en Categories: Java y como proyecto: Java Application. Luego damos
click en el botón de comando Next.
3) Luego indicamos como nombre del proyecto campeonatoUefa y posteriormente damos
clic en el botón de comando Finish, quedando el entorno de NetBeans de la siguiente
manera:
Ing. Mirko Manrique Ronceros
Página 19 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
4) En Libraries lo seleccionamos y damos clic con el botón de derecho y eligimos la
opción Add Library.
5) Aparece un cuadro de diálogo para seleccionar la librería a agregar, en este caso
MySQL (en las últimas versiones de NetBeans tenemos el conector MySQL JDBC
Driver) y damos clic en Add Library.
6) Volvemos al entorno de NetBeans y se observa la nueva librería agregada.
Ing. Mirko Manrique Ronceros
Página 20 de 100
7)
Universidad Nacional del Santa
Facultad de Ingeniería
Tecnología Cliente–Servidor con Java
E.A.P. Sistemas e Informática
Ahora procedemos a la concexión de una base de datos, que en este caso será la
base de datos transportes, la misma que ya se encuentra creada conjuntamente con
las tablas de Ciudad y
Ruta.
Seleccionamos
la
pestaña Services y en
Databases seleccionamos
la carpeta Drivers.
8) Para agregar el concetor MySQL, haga clic en el botón derecho del mouse en el
nodo o carpeta Drivers y seleccione la opción New Driver.
9) Aparecerá el cuadro de diálogo para agregar un conector. Dar clic en el botón de
comando Add.
10) Navegar hasta encontrar el conector, seleccionado y dando clic en Abrir.
Ing. Mirko Manrique Ronceros
Página 21 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
11) En el cuadro de diálogo para agregar el conector se mostrará la información del
conector seleccionado. Luego dar clic en el botón de comado OK.
12) Un nuevo nodo para el conector a MySql, aparecerá en la pestaña Services.
Ing. Mirko Manrique Ronceros
Página 22 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
13) Ahora procederemos a conectarnos con la base de datos de campeonatouefa.
Seleccionamos el driver MySQL y damos clic botón derecho y elegimos la opción
Conecting using.
14) Se muestra un cuadro de diálogo para establecer el URL de la base de datos usando
el siguiente formato:
jdbc:mysql://servidor:puerto/baseDatos
donde servidor es la dirección IP (o nombre de dominio del servidor), en caso que el
servidor esté en la misma computadora que NetBeans utiliza el nombre: localhost;
puerto es el puerto empleado por el servidor. Si el servidor utiliza el puerto
predefinido, se puede omitir; baseDatos es la base de datos a la que se desea
conectar.
15) Damos clic en el botón de comando OK. A continuación aparecerá una ventana
confirmando la conexión con la base de datos de campeonatouefa. Luego damos clic
en el botón de comando OK.
Ing. Mirko Manrique Ronceros
Página 23 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
16) En el entorno de NetBeans se mostrará un nuevo nodo de conexión a la base de
datos.
17) Si damos click en + respecto al nodo creado se visualizará la tabla existente en la
base de datos de campeonatouefa.
Ing. Mirko Manrique Ronceros
Página 24 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Ing. Mirko Manrique Ronceros
Tecnología Cliente–Servidor con Java
Página 25 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
USO DEL ENTORNO DE NETBEANS PARA EL ACCESO DE
LA BASE DE DATOS Y EL PAQUETE JAVA.SQL
Acceso a la base de datos desde NetBeans
NetBeans nos permite hacer operaciones sobre la base de datos como crear y borrar tablas,
agregar y eliminar columnas, agregar, modificar y eliminar registros de datos como realizar
consultas.
Vamos a proceder hacer algunas operaciones:
1.
Expanda el nodo con la conexión a la base
de datos.
2.
Observamos en la figura anterior las
carpetas
Views
referidas
(vistas)
a
Tables
y
(tablas),
Procedures
(procedimeintos). Si expandimos el nodo
referido a Tables veremos la tabla estadio.
Ing. Mirko Manrique Ronceros
Página 26 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
3.
Tecnología Cliente–Servidor con Java
Si seleccionamos el nodo referido a Tables y damos clic botón derecho, se muestra un
menú flotante y luego elegimos la opción Create Table.
4. Vamos a proceder a crear la tabla de Equipo con los campos codequipo int,
nombre
varchar(40),
representante
varchar(32),
entrenador
varchar(40),
grupo
char(1) y estado bit. Una vez indicado los campos damos clic en el botón de comando
OK.
5.
Volvemos al entorno de NetBeans y observamos en la pestaña de Services la
nueva tabla de Equipo.
Ing. Mirko Manrique Ronceros
Página 27 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
6.
Tecnología Cliente–Servidor con Java
Si deseamos insertar un registro a una de las tablas a través del comando insert,
seleccionamos el nodo referido a Tables. Dando clic botón derecho se muestra un menú
flotante y luego seleccionamos la opción Execute Command...
7.
Escribimos el comando para insertar un nuevo registro en la tabla de Equipo, luego
procedemos a ejecutarlo.
Ing. Mirko Manrique Ronceros
Página 28 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
8.
Tecnología Cliente–Servidor con Java
Luego si escribimos el comando select para consultar los datos de la tabla Ciudad,
observaremos el contenido de dicha tabla.
Como verán el entorno de NetBeans nos ofrece la oportunidad de acceder y manipular los
datos y las estructuras de los elementos que conforman una base de datos. Ahora
ustedes mismos, en base a la experiencia de los conocimeintos adquiridos en los cursos
referentes a base de datos, procedan a experimientar el entorno gráfico que nos ofrece
NetBeans.
Ing. Mirko Manrique Ronceros
Página 29 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Paquete Java.SQL para trabajar con base de datos
Para realizar una aplicación para que realice cualquier operación de lo más sencilla
posible se necesita de la utilización de varias clases e interfases. JDBC ofrece el paquete
java.sql en la que existen clases e interfaces muy útiles para trabajar con base de datos.
Veamos las más importantes clases o interfases y en la medida en que se desarrolle las
sesiones se detallarán más mencionando los métodos que tienen para hacer fácil el
acceso a la base de datos.
● La clase DriverManager , permite llevar a cabo una conexión con la base de datos
logrando cargar un driver. Existen varios métodos para ello, entre las cuales se
destacan:
public
static
synchronized
Connection
getConnection(String
url)
throws
SQLException
public static
synchronized Connection getConnection(Strin url,String user, String
password) throws
El primero de los métodos recibe como parámetro la dirección URL que identifica la
base de datos. En el caso en que sea necesario proporcionar un usuario y una
contraseña para acceder a la base de datos (como sucede en MySql) se utiliza el
segundo de los métodos. Una dirección URL JDBC proporciona un método de
localización de bases muy parecido al que representan las direcciones URL que
identifican sitios Web de Internet. Los controladores JDBC tienen que ser capaces de
conectar
con
la
base
de
datos
a
partir
de
la
información
contenida
en
la
dirección URL JDBC de la misma, por lo que son los desarrolladores los que fijan en la
mayoría de los casos la sintaxis.
● La interfaz Connection, cuando se utiliza uno de los métodos anteriormente
mencionados se obtiene un objeto de tipo Connection que representa como es de
esperar la conexión con la base de datos. El objeto obtenido cuenta con varios métodos.
Dos de los más importantes son:
public abstract Statement createStatement() throws SQLException
public abstract void close() throws SQLException
El primero de los métodos sirve para crear un objeto del tipo Statement. Las frases SQL
se ejecutan normalmente mediante la utilización de objetos del tipo Statement.
Finalmente, es conveniente cerrar las conexiones tan pronto como dejen de utilizarse
para
liberar
recursos.
No
obstante,
ha
de
tenerse
en
cuenta
que establecer
una conexión es una operación costosa, por lo que tampoco se debe estar abriendo
y cerrando la conexión con frecuencia.
Ing. Mirko Manrique Ronceros
Página 30 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
● La interfaz Statement, los objetos de
tipo Statement permiten realizar consultas y
efectuar operaciones de actualización, borrado o inserción de datos. En algunos casos es
interesante también fijar ciertos parámetros vinculados con la consulta que se desea
realizar, como por ejemplo el tiempo que estamos dispuestos a esperar a que el gestor de
la base de datos devuelva el resultado de la consulta. Los métodos que se citan a
continuación son algunos de los más importantes para llevar a cabo todas estas acciones.
public abstract ResultSet executeQuery(String sql) throws SQLException
Ejecuta una sentencia SELECT y devuelve el resultado mediante la interfaz
ResultSet
public abstract int executeUpdate(String sql) throws SQLException
Ejecuta una sentencia UPDATE, DELETE, INSERT o cualquier otra sentencia SQL que
no
devuelva un conjunto de registros, y devuelve el número de registros afectados por
la sentencia.
public abstract void setMaxRows(int max) throws SQLException
Establece el número máximo de registros que puede devolver executeQuery()
public abstract int getMaxRows() throws SQLException
Devuelve el número máximo de registros que puede devolver executeQuery()
public abstract void setQueryTimeout(int seconds) throws SQLException
Establece el tiempo en segundos que el controlador esperará hasta que el sistema gestor
de bases de datos devuelva un resultado
public abstract int getQueryTimeout() throws SQLException
Devuelve el tiempo en segundos que el controlador esperará hasta que el sistema gestor
de bases de Datos devuelva un resultado
public abstract void close() throws SQLException
Libera los recursos asociados a la sentencia
● La
interfaz
ResultSet,
el
método
executeQuery
que
se
utiliza
para
ejecutar
sentencias SQL devuelve un objeto de tipo ResultSet. Éste contiene las filas o registros
obtenidos al ejecutar una sentencia SELECT. Para recuperar los datos contamos
Ing. Mirko Manrique Ronceros
con
Página 31 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
muchas opciones. Todos los métodos funcionan de la misma manera. Toman como
parámetro el índice o el nombre del campo que se desea obtener y devuelven el dato en
cuestión.
public abstract String getString(int columnIndex) throws SQLException public
abstract String getString(String columnName) throws SQLException public
abstract int getInt(int columnIndex) throws SQLException
public abstract int getInt(String columnName) throws SQLException
Además,
existen
otros
métodos
gracias
a
los
cuales
es
posible
recorrer
los
resultados guardados en el objeto de tipo ResultSet.
public
abstract
int
findColumn(String
columnName)
throws
SQLException
Devuelve el número de columna cuyo nombre se pasa como parámetro public
abstract boolean next() throws SQLException
Un
objeto
de
tipo
ResultSet
puede
contener
más
de
un
resultado.
Para
ir
avanzando por la lista de resultados utilizamos este método, que devuelve un valor
indicando si existe otro resultado o no.
public abstract boolean wasNull() throws SQLException
Indica si el contenido de la última columna accedida es NULL SQL
public abstract void close() throws SQLException
Libera los recursos asociados al ResultSet
Vamos a proceder a visualizar en objetos Jlist, los datos contenidos de la tabla de Equipo.
1)
Creamos un
objeto
para
Jframe
abrir
un
nuevo formulario.
Ing. Mirko Manrique Ronceros
Página 32 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
2) Indicamos como nombre de clase formulario: frmverEquipos. Luegos damos click en
el botón de comando Finish.
Quedando el entorno de NetBeans de la siguiente manera:
3)
Damos clic botón derecho sobre el diseño del formulario para cambiar el
Set
Layout a AbsoluteLayout, lo cual nos permitirá usar los objetos de control más
libremente.
Ing. Mirko Manrique Ronceros
Página 33 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
4)
Tecnología Cliente–Servidor con Java
Colocamos los objetos de control quedando el diseño del formulario de la siguiente
manera:
5) Borramos los Items de cada objeto Jlist y colocamos los nombres a cada objeto de
control. Recuerden que para eliminar los items de cada Jlist hay que hacer uso de
model que se encuentra en la ventana de propiedades.
Ing. Mirko Manrique Ronceros
Página 34 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
6) A continuación procedemos a colocar la programación.
En la primera llave (color rojo) observamos que importamos los paquetes java.sql
(todo lo que acabamos de ver) y el paquete javax.swing para poder utilizar la clase
JoptionPane
para
la
visualización
de
un
mensaje
a
través
de
su
método
ShowMessageDialog. En la segunda llave se define las variables que se van a
usar. Vendría hacer los atributos de la clase frmVerEquipo. Como tenemos establecer
conexión usaremos un objeto Connection (conn), para hacer una operación de consulta
usaremos un objeto Statement (st) y para almacenar los resultados de la consulta
usaremos un objeto ResultSet (rs). Como la aplicación hace uso de los Jlist se tiene
crear 4 objetos instanciados de la clase DefaultListModel (mayor información en la
sesión 4 del curso de Programación Visual). Posteriormente preparamos variables para
indicar el nombre de la base de datos, el login, el password y el url. En la tercera llave
se ha diseñado un método denominado Enlace que permitirá establecer conexión con
la base de datos campeonatouefa.
Ing. Mirko Manrique Ronceros
Página 35 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
7) La clase frmVerEquipo tienen un método del mismo nombre frmVerEquipo(), esto es
lo que se denomina método constructor. Deseamos que los datos se muestren en los
objetos Jlist al momento de la ejecución del formulario debemos programar en el
método antes mencionado.
Los objetos instanciados de la clase DefaultListModel deben ser vinculados a cada
uno de las cajas de listas. Luego usando el bloque try{ } que por cierto sirve para
interceptar errores y si lo hubiera ejecutaría lo programado en el bloque catch{ },
establecemos laconexión usando el método Enlace, creamos el objeto st de tipo
Statement (se encuentra listo para relizar una operación) y luego ejecutamos una
sentencia de consulta con select cuyo resultado va ocasionar que los datos se
almacenen en el objeto rs del tipo ResultSet. Finalmente con el método next
se logra desplazar a
través de
los
registros
de
datos
para
ir llenado
los
objetos modelo1, modelo2, modelo3 y modelo4 y de esta forma llenamos los
objetos Jlist lo que nos permitirá ver en el formulario los datos de la tabla de
Equipo.
Ing. Mirko Manrique Ronceros
Página 36 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
8) Recuerda que en la sesión anterior sólo se agregó un registro a la tabla de Equipo.
Si gustan ingresen más registros a la tabla de Equipo y observarán los resultados.
Si ejecutamos la aplicación observamos lo siguiente:
Ing. Mirko Manrique Ronceros
Página 37 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
OBJETO DE CONTROL JTABLE EN
MANTENIMIENTO DE DATOS
Objeto de control JTable
La presentación de datos tabulados es una de las tareas más comunes que se presentan al
momento de crear interfaces gráficas; desde la simple tabla que permite únicamente
mostrar el resultado de una consulta, hasta las que permiten editar directamente el
contenido de cada celda, ordenar las columnas, personalizar su apariencia, etc. Todas las
tareas antes descritas, y muchas otras, son posibles de realizar utilizando la clase JTable;
por supuesto, mientras más complejo sea el requerimiento a cubrir, se requerirá en igual
medida utilizar más métodos o recursos de la clase.
El objeto Jtable como los modelos de la tabla representados a través de la interfaz
TableModel, pertenecen al paquete javax.swing.
El siguiente gráfico intenta mostrar como cada componente JTable obtiene siempre sus
datos desde un modelo de tabla.
El TableModel se implementa a partir de la clase AbstractTableModel, aunque existe un
modelo de tabla predeterminado denominado la clase DefaiultTableModel. 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.
Ing. Mirko Manrique Ronceros
Página 38 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Mantenimiento de Datos usando JTable como vista de datos
Un mantenimiento de datos consiste en grabar datos en una tabla, eliminar datos
correspondiente 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 procedera 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 campeonatouefa ya utilizada
desde la tercera sesión de aprendizaje:
1. Vamos a crear la tabla de estadio en la base de datos campeonatouefa. La
instrucción para la creación de dicha tabla es:
create
table
estadio(codestadio
int
not
null
primary
key
auto_increment, nombre varchar(40) not null,
sede varchar(32) not null,
pais
varchar(20)
not
null, estado bit);
Cabe señalar que los campos referidos a la sede y al pais pudieron haber sidos tablas
que se relacionen con la tabla de estadio. Lo importante es como hacer mantenimiento
de datos a una tabla, la normalización que se pueda hacer a las tablas que irán
creando en la base de datos campeonatouefa queda para las modificaciones que crean
convenientes.
2.
Logremos establecer la conexión con la base de datos de campeonatouefa en el
entorno de NetBeans.
Ing. Mirko Manrique Ronceros
Página 39 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
3.
Tecnología Cliente–Servidor con Java
Volvamos a la pestaña Proyects donde vamos a crear métodos en la clase Main,
necesarios para la conexión con la base de datos y el enlace con la tabla de
estadio.
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 Main
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
varibales 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 campeonatouefa. Seguimos a continuación agregando más métodos a la
clase Main.
Ing. Mirko Manrique Ronceros
Página 40 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 EnlEst que permitirá enlazarnos con la tabla de Estadio aplicando el
método executeQuery() estableciendo a través del comando select a todos los campos
de la tabla de Estadio solo aquellos cuyo estado es igual a 1, es decir, los estadios que
están habilitados para su uso.
Si observamos en cada uno de los métodos se esta usando throws SQLException, esto
quiere decir que los métodos usan excepciones (intercepcion de errores) para los erroes
que se pueden presentar durante la conexión y acceso de datos.
4. La tabla de Estadio posee realmente cinco campos, pero el último es para indicar si el
estadio esta habilitado para su uso o no lo está, estom quiere decir si hacemos una
elimnación se procederá a cambiar el estado a 0 (elimación lógica) y
cada vez que
grabemos los datos de un nuevo estadio se habilitará.
Vamos a diseñar el siguiente formulario al cual lo llamaremos frmMantEstadio
dando
los
nombres
correspondientes
a
cada
uno
de
los
objetos
de
control
dibujados.
Ing. Mirko Manrique Ronceros
Página 41 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
5. Vamos a proceder a programar, colocando las siguientes líneas de código.
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 campeonato_uefa que contiene a la clase Main con lo
cual podremos hacer uso de todos los métodos que tenga.
Ing. Mirko Manrique Ronceros
Página 42 de 100
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Iniciamos la construcción de la clase frmMantEstadio, 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 objeto JTable
denominado tablaEstadio. 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 que circunstancias nos encontremos en la ejecución de
la aplicación de mantenimiento de datos de Estadios. Con el método limpiarDatos se
limpia los cuadros de textos.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 Estadio. 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
next
devuelve
método
de
la interfaz
ResulSet.
El
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
estadio buscado, haciendo que los cuadros de textos se muestren los demás
datos, es entonces que la variable encuentra recién se hace verdadero.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Ing. Mirko Manrique Ronceros
Tecnología Cliente–Servidor con Java
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
El botón de comando btnVer (Ver Lista de Estadios), 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 Estadio. Se define un vector denominado datos de tamaño 5 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 tablaEstadio. Pero antes de agregarlo debemos
asegurarnos que no exista fila alguna de datos en el modelo dtm y por ende en la
tablaEstadio. El bucle de la sentencia while permite colocar en cada elemento del
arreglo los datos extraidos 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 tablaEstadio 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 inhabilita el cuadro de texto txtCodEst y se envía el cursor
al
cuadro de texto txtNom. 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. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Ing. Mirko Manrique Ronceros
Tecnología Cliente–Servidor con Java
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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
campeonatouefa, pasamos los datos ingresados a variables como nom, sede y pais. 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. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 Estadio. Si la respuesta es afirmativa
se procede a conextarse a la base de datos
y en la variable de memoria cod se
almacenada el código del estadio ingresado a travñes del cuadro de texto txtCodEst. Se
construye la instrucción usando el comando UPDATE, luego ejecutamos la eliminación
lógica haciendo que el campo estado sea igual a cero y se cierra la conexión con la
base de datos.
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.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
En el botón de comando Cancelar, luego de dar respuesta afirmativa se procede a
limpiar los cuadros de textos, habilta el cuadro de texto txtCodEst para su uso y se
vuelve a su estado inicial la hablitación de los botones de comando.
El botón de comando btnCerrar, con el método dispose se cierra la ventana o
formulario.
6. Procedemos a ejecutar el formulario, seleccionado Run File.
7. Observamos el formulario ejecutado.
8. 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.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
9.
Tecnología Cliente–Servidor con Java
Luego de grabar, al dar clic en el botón de comando Ver Lista de Estadios, el
formulario se mostrará de la siguiente forma.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
SWING MENUS Y MANTENIMIENTO DE DATOS
USANDO 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.
Aquí podemos ver el árbol de herencias de las clases relacionadas con los menús:
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. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 campeonatouefa de MySql,
Usar varias tablas no implica que se deba hacer mantenimiento de datos a todas a la vez.
La base de datos de campeonatouefa ya tiene la tabla de Estadio, agregaremos la tabla de
Equipo. Con las tablas de Estadio y Equipos podremos hacer la programación de los
encuentros, para ello crearemos la tabla de Programacion. Para hacer el mantenimiento
de datos de la tabla de Programación necesitaremos saber qué estadios están disponibles y
cuales son los equipos participantes para el encuentro. Sólo se tendrá en cuenta la
etapa eliminatoria del campeonato.
Vamos a proceder a crear las tablas y luego a construir la aplicación:
1. Creamos las tablas de Equipo usando el entorno de NetBeans.
2. Usando la opción Execute Command escribimos:
3. Ejecutamos la instrucción,
Ing. Mirko Manrique Ronceros
luego
aplicamos
una
actualización
(Refresh)
para
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
visualizar la nueva tabla.
Posteriormente vemos la nueva tabla en la pestaña Services
4. Nuevamente usando la opción Execute Command, escribimos:
5. Ejecutamos la instrucción, aplicamos Refresh y luego visualizamos la nueva tabla.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
6.
Tecnología Cliente–Servidor con Java
Vamos a crear un formulario denominado frmPrincipal, donde diseñaremos el
siguiente menú:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
7. Diseñamos el siguiente formulario que se denominará frmProgramacionPartidos.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
El cuadro de texto referido al numero de programación tiene como nombre txtNroPro,
para la fecha de encuentro txtFecha, para el JComboBox de la etapa de campeonato
tiene como nombre cboEtapa, para el JComboBox referido a grupo se denomina
cboGrupo, para el objeto JList referido al Equipo 1 se llama lstEquipo1, para el objeto
JList referido al Equipo2 se denomina lstEquipo2, para el cuadro de texto de la hora
programada se llama txtHora, para el objeto JcomboBox referido a los estadios se
llama
cboEstadios,
para
el
objeto JcheckBox referido a Suspendido se denomina
chkSuspendido y para el objeto JTable
Finalmente
para
los
botones
se
denomina
tablaProgramacion.
de
comando que realizarán el mantenimiento de datos de Programación de Partidos se
denominan: btnNuevo, btnBuscar, btnModificar, btnGrabar, btnCancelar y
btnCerrar.
8.
Vamos a proceder a agregar los métodos en la clase Main que utilizaremos para el
mantenimiento de datos de la Programación de Partidos.
Para obtener los registros de datos de aquellos encuentros que están programados
Para obtener los equipos que pertenecen a un grupo indicado. Cada grupo debe
estar conformado por 4 equipos.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Para obtener el nombre del equipo dado el código del equipo
Verifica si el encuentro entre un equipo y otro ya fue programado. Esta consulta
construida a partir del comando select utiliza el concepto de subconsultas. Cuando
tratemos el tema de consulta de datos se explicará la construcción de sentencias que
usan varias tablas.
Para obtener el código del equipo dado el nombre del equipo. Este método nos servirá al
momento de grabar datos.
Para obtener el código del estadio dado el nombre del estadio. Este método nos servirá
al momento de grabar o modificar datos.
9.
Veamos a continuación el código de la programación que tendrá el formulario
frmProgramacionPartidos.
a. Agregar los paquetes antes de la definción de la clase frmProgramacionPartidos.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
b. Definir los atributos o variables a usar en los distintos métodos que forma la
clase frmProgramacionPartidos
c. El método constructor frmProgramacionPartidos() debe quedar de la siguiente
manera:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
d. Construimos los métodos activaBotones y limpiarObjetos()
e. Diseñamos el método llenarListas() para mostrar los posibles encuentros dado los 4
equipos que conforman un grupo.
f. También se tienen el método llenarTabla() para llenar de datos en la filas del
objeto JTable denominado tablaProgramacion.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
g. Cuando se seleccione una etapa del campeonato, como por ejemplo eliminatoria se
habilitará el uso del objeto jComboBox llamado cboGrupo.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
h. Ahora vamos a proceder a programar en cuando se seleccione el grupo. No se
indicará todo el código ya que codificar para cuando se seleccione el grupo A, lo
mismo sucederá con los demás grupos que conforma la etapa eliminatoria del
campeonato.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
En este último if que observamos hacemos lo mismo para el grupo B y así
sucesivamente hasta el grupo H.
i. El botón de comando Buscar es para la búsqueda de una Programación de un
encuentro, cuya programación es la siguiente.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Continuamos con la programación ....
Ing. Mirko Manrique Ronceros
Tecnología Cliente–Servidor con Java
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
j. Cuando se seleccione un equipo en la caja de lista lstEquipo1 se procederá a
buscar si el encuentro ya fue programado o no.
Se hace lo mismo si la selección se hace del equipo en la caja de lista lstEquipo2.
k.
Para el botón de comando Cancelar procedemos a programar lo siguiente:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
l. Para el botón de comando Grabar procedmeos a codificar lo siguiente:
continuamos ...
m. Para el botón de comando Nuevo colocamos el siguiente código:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
n. Para el botón de comando Modificar escribimos el siguiente código:
10. Vamos a proceder a ejecutar el formulario desde el menu.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
MANTENIMIENTO DE DATOS USANDO
PROCEDIMIENTOS ALMACENADOS
Procedimientos almacenados
Poco a poco las empresas y muchas personas en general empiezan a mirar más hacia el
Software Libre y se dan cuenta que existen excelentes alternativas a distintos programas
que para ellos son de uso frecuente en otro Sistema Operativo, como pueden ser
OpenOffice, Mozilla Firefox, Eclipse, NetBeans, PostgreSQL, PHP y MySQL por citar algunos,
en esta nota hablaré un poco del Manejador de Bases de datos MySQL, que en los últimos
años ha tenido grandes avances en su desarrollo y actualmente es uno de los DBMS más
usados en sitios web y que en sus últimas versiones ha incorporado nuevas características
como
la
implementación
de
las
tablas,
disparadores,
funciones
y
procedimientos
almacenados. Los procedimientos almacenados son de gran utilidad para realizar tareas
frecuentes en una base de datos, es sorprendente la cantidad de tiempo que se puede
llegar a ahorrar al hacer uso de este mecanismo.
Interface PreparedStatement
Este componente permitirá hacer uso de los procedimientos almacenados. Una vez
instanciado el objeto usaremos el método preparedStatement para invocar el uso de un
procedimiento almacenado. También se hará uso de los métodos setString(), setInt(),
setDate(), etc para indicar la posición del parámetro y el valor de dicho parámetro.
Finalmente
usaremos
el
método
executeUpdate()
para
ejecutar
el
procedimiento
almacenado.
A continuación, procedemos a diseñar el mantenimiento de datos de la tabla de Arbitro
usando procedimientos almacenados:
1. Creamos la tabla de Arbitro dentro de la base de datos campeonatouefa:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
2.
Tecnología Cliente–Servidor con Java
Procedemos a crear el procedimiento almacenado sp_grabaArbitro que permitirá la
grabación de datos cuando se inserte un registro de datos en la tabla de Arbitro.
Una vez ejecutado la creación del procedimeinto almacenado se observará en la
pestaña de Services que dicho procedmiento se ha creado.
3.
Luego, procedemos a crear el procedimeinto almacenado sp_modificaArbitro que
permitirá modificar o actualizar los datos de la tabla de Arbitro.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Una vez ejecutado la creación del procedimeinto almacenado se observará en la
pestaña de Services que dicho procedmiento se ha creado.
4.
Posteriormente, procedemos a crear el procedmiento almacenado sp_eliminaArbitro
que permitirá hacer una eliminación lógica del registro de datos.
Una vez ejecutado la creación del procedimeinto almacenado se observará en la
pestaña de Services que dicho procedmiento se ha creado.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
5. En el formulario frmPrincipal que contiene el diseño del menú, ubicamos la opción
Arbitro dentro de Mantenimientos.
6. Seleccionado
Arbitro
y
dando
clic
botón
derecho
del
Events/Action/ActionPerformed.
Luego, escribimos el siguiente código:
7. Diseñamos el siguiente formulario denominado frmMantArbitro.
Ing. Mirko Manrique Ronceros
mouse
elegimos
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
8. En la clase Main colocar el método EnlArb().
9.
Vamos a proceder a programar en el formulario frmMantArbitro colocando las
siguientes líneas de código:
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 campeonato_uefa que contiene a la clase Main con lo
cual podremos hacer uso de todos los métodos que tenga.
Preparamos las variables para el acceso de datos: conn, st, rs. En el método
constructor frmMantArbitro() preparamos las columnas del objeto JTable y damos al
formulario su tamaño y ubicación dentro de la pantalla.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Los métodos activaBotones() permitirá gestionar el uso de los botones de comando y el
método limpiarDatos() es para limpiar los cuadros de textos.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 Arbitro. En la variable b se coloca el
valor ingresado en el cuadro de texto txtCodArb. Se define una variable boleana
encuentra para manejar la situaciçon de éxito o fracaso de la búsqueda. En la sentencia
while utizamos el método next() que pertenece al obejto 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 del árbitro 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 Arbitros), 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 Arbitro. Se define un vector denominado datos de tamaño 6
elementos del tipo String que servirá colocar los datos de una fila para luego agregarlo al
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
objeto dtm que está vinculado al objeto JTable llamado tablaArbitro. Pero antes de
agregarlo debemos asegurarnos que no exista fila alguna de datos en el modelo dtm
y por ende en la tablaArbitro. El bucle de la sentencia while permite colocar en cada
elemento del arreglo los datos extraidos 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 tablaArbitro entonces se podrá observar los
registros agregados.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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
campeonatouefa, pasamos los datos ingresados a variables como ape, nom, fecha y
nac.
En
la
variable
pstmt
establecemos
como
procedimiento
sp_grabaArbitro, colocando 4 signos de interrogación que
parámetros que
almacenado
a
expresa el manejo de 4
tiene dicho procedimiento. Con los métodos setString() del objeto
instanciado pstmt indicamos la posición del parámetro y el valor del parámetro, así por
ejemplo: 1 indica ser el primer parámetro de entrada del procedimeinto almacenado
sp_grabaArbitro y ape
contiene
el
dato
apellido
que
se
asignará
al
primer
parámetro. Una vez indicado los valores a cada uno de los parámetros se hace uso del
método
executeUpdate()
que
permitirá
ejecutar
el
procedimiento
almacenado.
Posteriormente se procede a cerrar la conexión con el método close del objeto
connection conn.
Para el botón de comando btnNuevo, limpiamos los cuadros de textos con el método
limpiarObjetos. Se inhabilita el cuadro de texto txtCodArb y se envía el cursor al cuadro
de texto txtNom. Se inhabilta los botones de comando a excepción de grabar.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 Estadio. 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 del árbitro ingresado a través del cuadro de texto txtCodArb. En
la variable pstmt establecemos como procedimiento almacenado a sp_eliminaArbitro,
colocando un signo de interrogación que expresa el manejo de un sólo parámetro, luego
se usa el método setInt() para indicar el valor del parámetro y posteriormente se cierra
la conexión.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
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 procede a utilizar el procedimiento almacenado sp_modificaArbitro. 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, habilta el cuadro de texto txtCodArb para su uso y se
vuelve a su estado inicial la hablitación de los botones de comando.
El botón de comando btnCerrar, con el método dispose se cierra la ventana o
formulario.
10. Procedemos a ejecutar el formulario desde el menú.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
TRANSACCIONES Y BUSQUEDAS CON BASE DE
DATOS
Transacciones con Base de Datos
Uno concepto que causa problemas a los principiantes en el mundo del desarrollo de
aplicaciones de base de datos es la idea de transacciones. Fundamentalmente, una
transacción representa una unidad de trabajo lógica. Como la principal responsabilidad de
una base de datos es preservar la información, necesita tener algo que le indique a un
usuario que se debe salvar el estado actual del programa. De igual forma, cuando las cosas
han ido mal, necesita una forma para indicar que una base de datos debería ignorar el
estado actual y volver a atrás, al estado del programa salvado anteriormente.
En el idioma de las bases de datos, estas funciones se llaman entregar una transación y
deshacer una transación, respectivamente. Para realizar estas tareas, el API JDBC
incluye dos métodos como parte del interface Connection. Dando un objeto Connection
llamado con, el estado del programa se graba llamando a con.commit(), para volver al
estado
salvado
anteriormente,
con.rollback().
Estos
dos
métodos
pueden
lanzar
SQLExceptions si algo va mal cuando la base de datos realice realmente la operación, por
eso necesitamos envolverlos en bloques try ... catch. Por defecto, una conexión funciona en
modo autocommit, es decir, cada vez que se ejecuta una sentencia SQL se abre y se cierra
automáticamente una transacción, que sólo afecta a dicha sentencia. Es posible modificar
esta opción mediante setAutoCommit(), mientras que getAutoCommit() indica si se está en
modo autocommit o no. Si no se está trabajando en modo autocommit será necesario que
se cierren explícitamente las trasancciones mediante commit() si tienen éxito, o roolback().
En un entorno mono-usuario, las transaciones son bastantes sencillas de entender -simplemente implican salvar o deshacer el estado de una aplicación. Sin embargo, en modo
multi-usuario, las transaciones son más complejas. La demostración clásica de una
transación multi-usuario es una cuenta bancaria donde una aplicación está intentando hacer
un cargo mientras otra aplicación está intentando hacer un depósito en la misma cuenta. En
el caso del campeonatouefa al momento de ingresar los datos de las incidencias de un
encuentro o partido tendremos que grabar dos registros uno de cada equipo, esto quiere
decir que no se debe permitir grabar las incedencias de un equipo y las incendencias del
otro equipo no.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Búsquedas
de
datos
con
Tecnología Cliente–Servidor con Java
procedimientos
almacenados
usando
CallableStatement
Para las búsquedas y/o obtenciones de datos vamos a usar procedimientos almacenados.
La novedad con el uso de los procedimientos almacenados es hacer uso de parámetros
de salida. En esta oportunidad usaremos el interface CallableStatement que permitirá
trabajar con procedimeintos almacenados que hacen uso del comando select. Vamos a
usar el procedimiento almacenado sp_obtenerCodEquipo:
A continuación, procedemos a diseñar el proceso de Incidencias de un Encuentro o
Partido
usando
CallableStatement
procedimientos
almacenados con
la
interfaz
y transacciones:
1. Creamos la tabla de Incidencias dentro de la base de datos campeonatouefa:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Luego de ejecutar la sentencia, hacemos una actualización usando Refresh.
Observaremos la nueva tabla creada.
2.
Procedemos a crear el procedimiento almacenado sp_actualizaIncidencias que
permitirá la grabación de datos cuando se inserte un registro de datos en la tabla de
Incidencias.
Luego de ejecutar la sentencia, hacemos una actualización usando Refresh
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Observaremos el nuevo procedimiento creado
3.
Posteriormente
creamos
el
procedimiento
alcenado
sp_modificaIncidencias
que
permitirá modificar los datos de la tabla de Incidencias.
Luego
de
ejecutar
la
sentencia,
quedando la pestaña Services:
Ing. Mirko Manrique Ronceros
hacemos
una
actualización
usando
Refresh
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
4.
Tecnología Cliente–Servidor con Java
No olvidar de agregar el procedimeinto almacenado sp_obtenerCodEstadio (ver la
segunda pagina de ésta sesión).
5. En la clase Main agregamos los siguientes métodos:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Este método nos ayudará a llenar de datos en el objeto JTable del diseño de
formulario frmIncidenciasEncuentro.
Este método permitirá buscar las incidencias ocasionadas por los dos equipos de un
encuentro dado el número de programación.
6. En el formulario frmPrincipal que contiene el diseño del menú, ubicamos la opción
Incidencias dentro de Procesos.
7.
Seleccionando incidencias del Encuentro y dando clic con el botón derecho del
mouse elegimos Events/Action/ActionPerformed.
Luego, escribimos el siguiente código:
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
8. Diseñamos el siguiente formulario denominado frmIncidenciasEncuentro.
9.
Vamos a proceder a programar en el formulario frmIncidenciasEncuentro colocando
las siguientes líneas de código:
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 campeonato_uefa que contiene a la clase Main con
lo cual podremos hacer uso de todos los métodos que tenga.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Preparamos las variables para el acceso de datos: conn, st, rs. La variable graba es para
saber si se va a grabar las incidencias (true) o se va a modificar las incidencias (false). Con
la variable dtm es para el manejo del objeto Jtable.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
En el método constructor frmIncidenciasEncuentro() preparamos las columnas del
objeto
JTable
y llenamos
de
datos
usando
el método
VistaProgramacion().
También damos al formulario su tamaño y ubicación dentro de la pantalla
El método limpiarTextos() es dejar en blanco los cuadros de textos.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programar
en el
evento
MouseClicked
Tecnología Cliente–Servidor con Java
ea
para
que
el
usuario
seleccione
una
programación de partido se muestre las incidencias ocurridas en el encuentro.
Dado el número de la programación y usando el método BuscaProgIncidencias(), se
puede lograr encontrar las incidencias del partido. Si se encuentra las incidencias
se debe tener dos registros almacenados en la variable rs referido a las incidencias del
equipo local y del equipo visitante. Con el método next() de ResultSet se accede a
cada uno de los registros y con el método getString() sacamos los datos de cada
fila de datos y lo asignamos a cada uno de los cuadros de textos. Si no hubiera
incidencias del partido programado entonces los cuadros de textos estarían habilitados
para el ingreso de los datos de las incidencias.
Programar en el evento FocusLost permitirá asignarle los goles a favor que tiene el
equipo local como goles en contra al equipo visitante ó asignarle los goles en
contra del equipo local como goles a favor del equipo visitante.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Ing. Mirko Manrique Ronceros
Tecnología Cliente–Servidor con Java
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
V
a
m
o
s
explicando lo más resaltante de la programación del botón de comando Actualizar. Si la
variable pública graba viene con el valor True se procede a
conformación.
Si
la
respuesta
es
afirmativa
invocar un
mensaje
de
capturamos en la variable de memoria
nropro el número de la programación. A continuación viene el inicio de una transacción, que
a través del método setAutoCommit() al ponerle el valor de false dentro del paréntesis
estamos indicando a la conexión que no se procederá a terminar la transacción hasta que se
use el método commit().
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Viene el uso de la variable cstmt instanciado de la clase CallableStatement que permitirá
ejecutar un procedimiento almacenado. El procedemiento almacenado a usar se llama
sp_obtenerCodEquipo que posee un parámetro de entrada y otro de salida. El valor del
primer parámetro lo indicamos con el método setString() y como el segundo parámetro es
de salida se hace uso del método registerOutParameter() indicando el tipo de dato que es
entero. Con el método execute() se ejecuta el procedimeinto almacenado y para obtener el
valor del parámetro de salida usamos el método getInt() debido que el parámetro es de
tipo entero. Posteriormente se asignan a las variables los datos que se usarán para la
grabación
de
datos,
para
lo
cual
se
usará
el
procedimiento
almacenado
sp_actualizaIncidencias. Lo mismo hacemos con las incidencias del equipo visitante, se
asignan a las variables de memoria respectivas y nuevamente se procede a usar el
procedimiento almacenado sp_actualizaIncidencias. Luego procedemos a hacer uso del
método commit() a través del objeto conn que permitirá terminar la transacción.
En el caso de que la variable graba sea False, entonces se procederá hacer casi lo mismo
sino que esta véz se usará el procedimiento almacenado sp_modificaIncidencias para
modificar los datos.
El botón de comando btnCerrar, con el método dispose se cierra la ventana o
formulario.
10. Procedemos a ejecutar el formulario desde el menú.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
CONSULTA DE DATOS USANDO EL OBJETO JTABLE
Objeto de control JTable y métodos del interface ResulSet
El objeto Jtable constituirá en el componente de visualización de los datos obtenidos a partir
de una consulta realizada ala base de datos. En sesiones anteriores hemos contemplado el
manejo del TableModel (modelo) como también sus principales métodos. Generalmente
cuando se realiza una consulta a una base de datos se traen “todos” los registros, lo cual
funciona con conjuntos de tamaño razonable, pero con mas de 3000 registros ya puede traer
problemas de performance, o de memoria.
Lo mejor en estos caso es paginar, y lo bueno es que JDBC proporciona ciertas
facilidades, como la función para saltar a un registro determinado “absolute()”.
Aquí hay un ejemplo completo, se le entrega el número de página, y la cantidad de filas, y
retorna un arreglo con los registros. Esta implementación mejora considerablemente el
desempeño (performance) de la consulta (query), debido que el conjunto resultado (result
set) que se recorre, y maneja es mucho menor.
El ejemplo también sirve para ver como se debe hacer una consulta a la base de datos en
Java, con JDBC, ya que implementa otras recomendaciones comunes, como el uso de
“prepared statement”, que también optimiza la ejecución de las consultas, precompilando el
query en la Base de Datos, y manteniendolo en “cache” para futuras ejecuciones.
Veamos a continuación como se podría hacer una consulta a los datos de la tabla de Estadio y
almacenarlos en un arreglo.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Con respecto al uso de los métodos de un ResultSet, lo más utilizados son:
● public abstract boolean next() throws SQLException
Un objeto de tipo ResultSet puede contener más de un resultado. Para ir
avanzando por la lista de resultados utilizamos este método, que devuelve un valor
verdadero indicando si existe otro resultado o falso cuando ya no existe registro o fila
alguna.
● public abstract String getString(int columnIndex) throws SQLException
● public abstract String getString(String columnName) throws SQLException
● public abstract int getInt(int columnIndex) throws SQLException
● public abstract int getInt(String columnName) throws SQLException
Para recuperar los datos contamos con muchas opciones. Todos los métodos
funcionan de la misma manera. Toman como parámetro el índice o el nombre del
campo que se desea obtener y devuelven el dato en cuestión.
● public abstract void close() throws SQLException
Libera los recursos asociados al ResultSet.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Consulta de Datos usando PreparedStatement
En esta oportunidad vamos a utilizar el interface PreparedStatement para preparar la
consulta, cuya ejecución devolverá los resultados a un objeto ResultSet.
Seguimos usando la base de datos campeonatouefa, construyendo en esta oprtunidad una
consulta que muestre los jugadores que pertenecen a un equipo seleccionado.
Para diseñar y desarroller la aplicación seguiremos los siguientes pasos:
1. En la clase Main agregamos el siguiente método denominado BuscaJugEquipo:
El método BuscaJugEquipo se inicia invocando al método sta() que a su vez utiliza el
método Enlace(), este último establece la conexión con la base de datos, por lo tanto
el objeto conn deja de ser null y contiene la información necesaria de la conexión con
la base de datos campeonatouefa. Se declara la variable cad de tipo String,
que
contiene una consulta que por cierto es una subconsulta ya que contiene más
de una sola vez el uso del comando select. Esta consulta lo que busca es obtener los
datos de los jugadores que pertenecen a un equipo. Luego se declara y se construye
una variable objeto ps del tipo PreparedStatement que a partir del objeto conn de
tipo Connection se indica la sentencia select a ejecutar. Como la sentencia select tiene
un signo ? que indica que falta darle un valor, entonces se procede a usar el método
setString() donde el parámetro nomequi contiene el valor o dato a reemplazar en ?.
Se ejecuta la consulta usando el método
executeQuery(),
almacena en el objeto ResultSet llamado rs.
También en la clase Main debe estar el método EnlEqui():
Ing. Mirko Manrique Ronceros
cuyo
resultado
se
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Este método nos permitirá obtener los datos de los Equipos habilitados para el
campeonato.
2.
En el formulario frmPrincipal que contiene el diseño del menú, ubicamos la opción
Jugadores por Equipo dentro de consultas.
Seleccionando Jugadores por Equipo y dando clic con el botón derecho del mouse
elegimos Events/Action/ActionPerformed
Luego escribimos el siguiente código:
3. Diseñamos el siguiente formulario denominado frmConsJugEqui.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
4. Vamos a proceder a programar en el formulario frmConsJugEqui colocando las siguientes
líneas de código:
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 campeonato_uefa que contiene a la clase Main con lo cual podremos
hacer uso de todos los métodos que tenga.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Se define las variables objeto conn, st, rs del tipo Connection, Statement y
ResultSet
inicializando
como
null.
La
variable
objeto
dtm
es
del
tipo
DefaultTableModel para el manejo del objeto Jtable tablaConsulta.
Establecemos con los métodos setSize() y setLocation() el tamaño y la localización
del objeto formulario. Con la variable arreglo llamado titulos de tipo String, almacenamos los
títulos de cada uno de las columnas. Con el método setColumnIdentifiers() damos el
arreglo titulos para establecer los titulos de cada columna que maneja el modelo dtm. Con el
método setmodel() vinculamos el modelo al objeto Jtable tablaConsulta. En el bloque try
iniciamos con establecer la conexión con la base de datos campeonatouefa. Una vez que se
tienen la conexión procedemos a ejecutar el método EnlEqui() que se encuentra en la clase
Main que permitirá obtener todos los equipos.
Con el método next() se ubica al primer
registro de los resultados devueltos por el método EnlEqui(), de ahí cada vez que usemos el
método next() se desplazará al siguiente registro. Cuando el método next() devuelva falso
terminará la ejecución de la setencia repetitiva while. En cada desplazamiento se agregará al
objeto JcomboBox denominado cboEquipos el nombre del equipo.
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
Se declara la variable nomequi de tipo String, f e i de tipo int. En la variable nomequi
se almacena el nombre del equipo seleccionado del objeto JComboBox denominado
cboEquipos. El método getSelectedItem() obtiene el nombre del equipo elegido
pero lo extrae de tipo Object y al anteponerle la expresión (String) se comporta como
dato de tipo String y lo asigna a la variable nomequi. En el bloque try establecemos la
conexión
con
la
base
de
datos
campeonatouefa
y ejecutamos el método
BuscaJugEquipo() perteneciente a la clase Main que devolverá los datos de los jugadores
pertenecientes al equipo seleccionado. Se declara e instancia un arreglo denominado
datos[] que permitira guardar los datos
de un jugador encontrador en la variable rs, pero antes nos aseguramos que no exista
fila alguna en el objeto JTable tablaConsulta. La sentencia repetitiva while y usando el
método next() del objeto rs es para ubicarnos en la primera fila y en las siguientes filas
de los resultados devueltos por el método BuscaJugEquipo(). En cada interación se
agregará una fila en el objeto tablaConsulta a través del modelo dtm usando el método
addRow().
Ing. Mirko Manrique Ronceros
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Tecnología Cliente–Servidor con Java
El botón de comando btnCerrar, con el método dispose se cierra la ventana o formulario.
5.
Procedemos a ejecutar el formulario desde el menú.
Ing. Mirko Manrique Ronceros