miércoles, 31 de agosto de 2016

045.- Acceso A Base De Datos - Continuación - Java Y NetBeans

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:

  1. 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:



  1. En la parte superior de la ventana añade un botón con el texto Servicios Realizados que se llame btnServiciosRealizados:



  1. 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

  1. 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:
  1. 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.


  1. 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:
  1. 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.

  1. Ejecuta el programa y observa el resultado:



  1. 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:



  1. 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:

  1. 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.

  1. Para comprobar esta circunstancia, agrega un nuevo botón a la ventana principal con el texto “Ver Clientes”. Llámalo por ejemplo btnVerClientes.

  1. 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.

  1. 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:



  1. 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