Recapitulando:
Para hacer una aplicación
java que acceda a una base de datos se debe realizar lo siguiente:
-
Preparar
la base de datos desde el método constructor.
-
Usar
el objeto sentencia cada vez que se quiera consultar la base de datos o
actuar sobre ella.
-
Los
resultados de las consultas ejecutadas sobre la base de datos se recogerán en
objetos ResultSet que contendrán los datos devueltos por la consulta.
-
Cerrar
la conexión a la base de datos cuando ya no haya que usarla más.
Consultar la Base
de Datos:
En la entrada anterior de
este blog se vio que se puede usar el objeto sentencia para ejecutar
una consulta SQL en la base de datos. Al hacer esto se consigue un objeto ResultSet
que contiene el resultado de la consulta.
El contenido del ResultSet
tiene forma de tabla, y podemos extraer la información colocándonos en la fila
correspondiente del ResultSet y luego usando los métodos:
getString
getDouble
getInt
según queramos extraer el dato
en forma de cadena, de número real o número entero.
En esta publicación se
insistirá sobre la forma de manipular los datos contenidos en un ResultSet.
EJERCICIO GUIADO Nº 1
PLANTEAMIENTO:
Se quiere realizar una
pequeña aplicación de base de datos que nos muestre información sobre los
servicios realizados por la empresa AMANUVA. Para ello, siga los pasos que se
indican a continuación:
- Entre en NetBeans.
Crea un nuevo proyecto llamado ServiciosAmanuva. Dentro de
este proyecto crea un paquete principal llamado paqueteVentanas y
dentro de él un JFrame llamado VentanaPrincipal:
- En la parte superior
de la ventana añade un botón con el texto Servicios Realizados
que se llame btnServiciosRealizados:
- Se pretende
simplemente que al pulsar el botón btnServiciosRealizados aparezcan
en un JOptionPane datos sobre los servicios almacenados en la
base de datos.
PREPARACIÓN DE LA APLICACIÓN JAVA
PARA EL ACCESO A LA BASE DE
DATOS
- Preparar nuestro
proyecto para que permita el acceso a la base de datos AMANUVA es un
proceso complejo, aunque afortunadamente siempre se hace igual.
Solo tiene que añadir el
siguiente código a su ventana principal:
REALIZAR CONSULTAS SQL
USANDO EL OBJETO SENTENCIA:
- Ahora que hemos
preparado nuestro proyecto para poder usar la base de datos AMANUVA, ya
podemos programar el botón para visualizar los servicios. Entra dentro del
evento actionPerformed de este botón y programa lo siguiente:
Si observas el código, lo
que hace es ejecutar la consulta SQL:
SELECT * FROM Servicios ORDER BY
cantidad_cobrada
la cual extrae todos los
servicios almacenados en la tabla Servicios ordenados por la cantidad_cobrada de menor a mayor.
El resultado de esta
consulta se almacena en un ResultSet
y se usa un bucle típico que recorre el ResultSet
y muestra el tipo de cada servicio y la cantidad_cobrada:
while (rs.next()) {
info = info +
rs.getString("tipo") + " " +
rs.getString("cantidad_cobrada") + "\n";
}
Puedes ejecutar el programa para ver como funciona.
- Aunque no es vital
para el programa, añadamos el cierre de la conexión de la base de datos en
el evento windowClosing de nuestra ventana:
EXTRAER FECHAS DEL
RESULTSET:
- Se va a mejorar el
programa de forma que se muestre de cada servicio el tipo, la cantidad_cobrada
y la fecha en que se hizo. Por tanto, haz el siguiente cambio
en el código del evento actionPerformed del botón btnServiciosRealizados:
Simplemente estamos
cambiando la concatenación de la cadena info de forma que aparezca la fecha
de cada servicio, el tipo y la cantidad_cobrada.
- Ejecuta el programa y
observa el resultado:
- Como se ha podido
observar, las fechas extraídas del ResultSet tienen un formato distinto al que usamos normalmente.
Para mejorar la
presentación de las fechas extraídas del ResultSet haz los siguientes cambios
en el código:
El código se ha mejorado de
forma que la fecha aparezca en un formato español correcto. Ejecuta el programa
para comprobar el resultado:
- Estudiemos el código
que acabamos de añadir:
Lo primero que se ha hecho
es crear 4 variables tipo cadena para contener el día, mes y año de la fecha
así como la fecha completa:
String cadFecha; //cadena para la fecha completa
String
cadDia; //cadena para el día
String
cadMes; //cadena para el mes
String
cadAnio; //cadena para el año
Dentro del bucle extraemos
la fecha del ResultSet y la almacenamos en la variable cadFecha:
cadFecha =
rs.getString("fecha");
Ahora mismo, la variable cadFecha
contendrá una cadena como la siguiente:
2
|
0
|
1
|
4
|
-
|
1
|
2
|
-
|
2
|
1
|
-
|
0
|
0
|
:
|
0
|
0
|
:
|
0
|
0
|
Para extraer el año de la
cadena, extraemos los caracteres comprendidos entre la posición 0 y la posición
3. Esto se hace usando el método substring de la siguiente forma:
cadAnio =
cadFecha.substring(0, 4);
Para extraer el mes de la
cadena, tendremos que extraer los caracteres comprendidos entre la posición 5 y
la posición 6. Esto se hace usando el método substring de la siguiente forma:
cadMes =
cadFecha.substring(5, 7);
Para extraer el dia de la
cadena, tendremos que extraer los caracteres comprendidos entre la posición 8 y
la posición 9 de la cadena. Esto se hace usando el método substring de la siguiente
forma:
cadDia =
cadFecha.substring(8, 10);
Una vez extraídos el día, mes
y año, de la cadena, podemos
concatenarlos formando una fecha en formato día/mes/año de la siguiente forma:
cadFecha =
cadDia + "/" + cadMes + "/" + cadAnio;
Así pues, finalmente
tenemos una variable cadFecha que será la que se visualizará en el JOptionPane:
info = info + cadFecha +
" " + rs.getString("tipo")
+ " " +
rs.getString("cantidad_cobrada") + "\n";
VALORES
NULOS:
- Es posible que algún
campo de algún registro de la tabla esté vacío. Es decir, que sea nulo. Si
esto ocurre, entonces al extraer dicho dato de la tabla usando getString aparecerá
el valor null en el
JOptionPane.
- Para comprobar esta
circunstancia, agrega un nuevo botón a la ventana principal con el texto “Ver
Clientes”. Llámalo por ejemplo btnVerClientes.
- Al pulsar este botón
aparecerá el listado de clientes de la empresa. Concretamente debe
aparecer el nombre del cliente, el teléfono 1 y el teléfono
2. Para ello añade el siguiente código dentro del evento actionPerformed del
botón.
Este código es
prácticamente igual que el anterior. Simplemente ejecuta una consulta SQL
usando el objeto sentencia que permite extraer el contenido de la tabla Clientes, y luego recorre el ResultSet mostrando los campos nombre, teléfono1 y teléfono2 en
un JOptionPane.
- Ejecuta el programa
ahora y prueba a pulsar este nuevo botón. Observa el resultado. Cada vez
que un cliente no tenga un teléfono, aparecerá el valor “null” en el JOptionPane:
- Vamos a arreglar esto
de forma que aparezca el texto “no tiene” en vez de la cadena “null”.
Modifique el código como se indica:
Como puedes ver, lo que se
hace ahora es comprobar si el valor extraído del ResultSet es null,
si es el caso, se concatena la cadena no
tiene. En caso contrario se concatena el valor del campo.
CONCLUSIONES:
A través del objeto sentencia podemos ejecutar una consulta SQL
en una base de datos.
El resultado de la consulta se almacena en un objeto del tipo ResultSet.
Al extraer el valor de un campo fecha desde el objeto ResultSet
observaremos que tiene el siguiente formato:
Año – Mes
– Día – Hora : Minutos : Segundos
Así pues puede ser necesario realizar cambios en esta cadena.
Al extraer el valor de un campo numérico real, obtendremos un número con
punto decimal. Quizás sea necesario cambiar este punto por una coma decimal.
Cuando un campo está vacío, al intentar extraer su valor obtendremos el
valor null.
No hay comentarios.:
Publicar un comentario