domingo, 4 de septiembre de 2016

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

Recapitulando:

Ejecución de consultas desde una aplicación Java:
Para ejecutar una consulta sobre la base de datos desde tu aplicación java se tiene que ejecutar una instrucción usando el objeto sentencia de la siguiente forma:

ResultSet rs = sentencia.executeQuery(“consulta_sql”);

La consulta_sql es una cadena que tiene forma de consulta SQL bien escrita (sin fallos). 

Por ejemplo:

String consulta;
consulta = ”SELECT * FROM Trabajadores”;
ResultSet rs = sentencia.executeQuery(consulta);

En este código que se acaba de mostrar, se crea una cadena llamada consulta. Se le asigna a esta cadena una instrucción SQL para extraer todos los trabajadores, y finalmente se ejecuta dicha instrucción SQL usando el objeto sentencia.

La cadena consulta puede ser construida a través de concatenaciones de cadenas. Observa atentamente este ejemplo. Es parecido al anterior pero tiene una ligera diferencia:

//Supongamos que txtNombreTabla es un cuadro de texto

String consulta;
Consulta = ”SELECT * FROM ” + txtNombreTabla.getText();
ResultSet rs = sentencia.executeQuery(consulta);


En este caso, la cadena consulta es la concatenación de:

“SELECT * FROM “

con

lo que contenga el cuadro de texto txtNombreTabla  - es decir, txtNombreTabla.getText().


La gran ventaja de esto, es que el usuario podrá escribir el nombre de una tabla cualquiera dentro del cuadro de texto txtNombreTabla y al ejecutarse este código se extraerá el contenido de dicha tabla.

Es decir, el usuario podrá decidir lo que quiere consultar. El usuario afecta a la construcción de la consulta SQL, y por tanto, tiene cierto control sobre esta consulta.

La construcción de consultas SQL a partir de la concatenación de cadenas y datos proporcionados por el usuario es algo muy usado en los programas de base de datos. En esta hoja guiada se insistirá en esta idea.



EJERCICIO GUIADO Nº 1

PLANTEAMIENTO:

Se quiere realizar una aplicación de base de datos que nos muestre información sobre los trabajadores de la empresa AMANUVA.
Esta aplicación le dará al usuario la capacidad de elegir la información que quiere extraer de la base de datos. Es decir, el usuario tendrá cierto control sobre las consultas que se realicen.

  1. Ejecuta el IDE NetBeans. Crea un nuevo proyecto llamado TrabajadoresAMANUVA. Dentro de este proyecto crea un paquete principal llamado paquetePrincipal y dentro de él agrega un JFrame llamado VentanaPrincipal:



  1. Añade a la ventana un JTextPane y un JButton:



El botón se llamará btnMostrarTrabajadores y el JTextPane se llamará txtPanelTexto.



  1. Para que este programa pueda trabajar con la base de datos AMANUVA tendrá que prepararlo haciendo lo siguiente:

- Añadir al programa los objetos conexion (Connection) y sentencia (Statement) como globales.

- Crear el método conectarBaseDatos y llamarlo desde el método constructor.

- Cerrar la conexión desde el evento windowClosing.

Realice estos tres pasos que se han indicado antes de continuar.

  1. Ya se puede programar el botón btnMostrarTrabajadores. Se pretende que al pulsar este botón aparezca en el panel txtPanelTexto el contenido de la tabla Trabajadores. Para ello, programe el siguiente código dentro del evento actionPerformed del botón btnMostrarTrabajadores:



Si analizas este código, verá que es igual al que hemos realizado en hojas anteriores. Básicamente lo que hace es lo siguiente:

- Ejecuta la consulta “SELECT * FROM Trabajadores ORDER BY sueldo

- Luego extrae del ResultSet los campos nombre, apellidos, sueldo y fecha_entrada.

- Por otro lado, la fecha se transforma para que tenga el formato día/mes/año.

- Finalmente se muestra el resultado de la consulta en el JTextPane: txtPanelTexto.


  1. Ejecuta el programa y prueba el funcionamiento de este botón:



  1. Se va a mejorar el programa. Añada un cuadro de texto llamado txtSueldo y luego tres botones llamados respectivamente btnMenorQue, btnIgualA y btnMayorQue. La parte inferior de la ventana quedará así:



  1. Se pretende que estos botones funcionen de la siguiente forma:

-       El usuario introducirá un sueldo en el cuadro de texto txtSueldo.
-       Luego, si pulsa el botón Menor a, aparecerá en el panel todos los trabajadores que tengan un sueldo menor que el introducido.
-       En cambio, si pulsa el botón Igual a, aparecerá en el panel todos los trabajadores que tengan un sueldo igual al introducido.
-       Y si pulsa el botón Mayor que, aparecerá en el panel todos los trabajadores que tengan un sueldo mayor que el introducido.

Se empezará programando el botón Igual.

  1. Programe lo siguiente en el evento actionPerformed del botón btnIgualA. (NOTA: El código siguiente es prácticamente igual al anterior, solo se hace un pequeño cambio. Puede copiar y pegar y luego hacer la modificación que se indica):



Estudiemos detenidamente el código remarcado:

String consulta;
consulta = "SELECT * FROM Trabajadores WHERE sueldo = " + txtSueldo.getText();
ResultSet rs = sentencia.executeQuery(consulta);

Aquí se crea una variable de texto llamada consulta y luego se concatena en ella la cadena:

SELECT * FROM Trabajadores WHERE sueldo =

con

lo que contenga el cuadro de texto sueldo; es decir txtSueldo.getText()


Si el cuadro de texto del sueldo contuviera un 6000, entonces la cadena resultante sería:

SELECT * FROM Trabajadores WHERE sueldo = 6000

Es decir, se construye una consulta que busca los trabajadores con sueldos de 6000 soles.

  1. Prueba a ejecutar el programa. Escribe un valor 6000 en el cuadro de texto y luego pulsa el botón Igual a. El resultado será que aparecen solo los trabajadores que tengan 6000 de sueldo.



  1. Programa ahora el botón Mayor que de la siguiente forma (El código es prácticamente igual al anterior, así que puedes usar copiar y pegar. Se indica con una flecha la pequeña diferencia):



Como se puede observar, el código es igual. Simplemente cambia el operador en la cadena que se concatena. Ahora se usa un mayor que.

Es decir, si el usuario introdujera un 6000 en el cuadro de texto del sueldo, el resultado de la concatenación en la variable consulta sería la siguiente cadena:

SELECT * FROM Trabajadores WHERE sueldo > 6000

  1. Prueba a ejecutar el programa introduciendo el valor 6000 en el sueldo y luego pulsando el botón Mayor que. El resultado será que aparece en el panel de texto los trabajadores que cobran más de 6000 soles.

  1. Como práctica, programa el botón Menor que de forma que muestre aquellos trabajadores que cobren menos de la cantidad introducida en el cuadro de texto txtSueldo.



  1. Vamos a seguir mejorando el programa. Añada ahora el siguiente cuadro de texto y los siguientes botones:



El cuadro de texto se llamará txtNombre mientras que el botón “Igual a“ se llamará btnNombreIgualA y el botón “Contiene a” se llamará btnNombreContieneA.


  1. Estos botones funcionarán de la siguiente forma:

-       El usuario introducirá un nombre en el cuadro de texto txtNombre.

-       Si luego pulsa el botón Igual a, entonces aparecerán todos aquellos trabajadores que tengan exactamente dicho nombre.

-       Si en cambio pulsa el botón Contiene a, entonces aparecerán todos aquellos trabajadores cuyo nombre contenga la palabra que se haya escrito en el cuadro de texto.

  1. Empezaremos programando el botón Igual a. Para ello, escriba el siguiente código dentro del botón (este código es parecido a los anteriores, puede usar copiar y pegar y luego realizar las modificaciones pertinentes):



Observa la modificación del código. Puedes ver que la consulta SQL se consigue concatenando tres cadenas (se han puesto en color para facilitar la comprensión):

Primera cadena: SELECT * FROM Trabajadores WHERE nombres = '
Segunda cadena: lo que contenga el cuadro de texto: txtNombre.getText()
Tercera cadena: '

Supongamos que el cuadro de texto contiene la palabra JUAN, el resultado de la concatenación sería:

SELECT * FROM Trabajadores WHERE nombres = ‘JUAN’

Es decir, el resultado de la concatenación sería una consulta SQL que muestra aquellos trabajadores que tengan de nombre JUAN.

NOTA:
Recuerda que cuando se especifica un valor de tipo texto en una consulta SQL, es necesario que esté entre comillas simples (‘).
Esa es la razón por la que se tienen que concatenar dos .


  1. Ejecuta el programa y prueba a escribir en el cuadro de texto del nombre JUAN. Luego pulsa el botón Igual a:



  1. Ahora programaremos el botón Contiene a de forma que el usuario escriba un texto en el cuadro del nombre, y al pulsar el botón Contiene a aparezcan todos aquellos trabajadores cuyo nombre contenga el texto escrito.

Por ejemplo, si el usuario introduce el texto “AN” en el cuadro, al pulsar Contiene a aparecerán los trabajadores que se llamen: JUANA, JUAN, ANTONIO, ANTONIA, MANOLO, ANA, etc. (todos contienen el texto ‘AN’).


  1. Para ello programa lo siguiente en el evento actionPerformed del botón Contiene a (es un código parecido al anterior, sólo tiene que modificar una línea de código):




En este caso, para crear la consulta se concatenan tres cadenas (se indican en color para facilitar la comprensión):

Primera cadena: SELECT * FROM Trabajadores WHERE nombres LIKE '%
Segunda cadena: lo que contenga el cuadro de texto: txtNombre.getText()
Tercera cadena: %’


Supongamos que escribimos en el cuadro de texto del nombre la palabra AN, el resultado de la concatenación sería el siguiente:

SELECT * FROM Trabajadores WHERE nombres LIKE '%AN%’

La condición nombres LIKE ‘%AN%’ significa que contenga la palabra AN.


  1. Ejecuta el programa y prueba a escribir en el cuadro de texto del nombre los carácteres AN. Luego pulsa el botón Contiene a y comprueba el resultado. Deben aparecer todos aquellos trabajadores cuyo nombre contenga el texto AN. Por ejemplo, SANTOS:



  1. Sigamos mejorando el programa. Añade estos cuadros de texto y estos botones:




  1. El objetivo de estos elementos añadidos es el siguiente:

-       El usuario introducirá una fecha (día, mes y año) en los cuadros de texto txtDia, txtMes y txtAnio respectivamente.

-       Luego, si pulsa el botón Antes de, aparecerán los trabajadores que hayan entrado en la empresa antes de la fecha indicada.

-       Si pulsa el botón Después de, en cambio, aparecerán los trabajadores que hayan entrado en la empresa después de la fecha indicada.

  1. Empezaremos programando el botón Antes de. Accede a su evento actionPerformed e incluye el siguiente código (es un código similar al anterior, solo tienes que modificar la consulta sql):



Presta mucha atención al código remarcado. En él, se construye una consulta que permite mostrar aquellos trabajadores cuya fecha de entrada en la empresa sea anterior a la indicada en los cuadros de texto.

Esto se consigue concatenando varias cadenas (se indican a continuación en distintos colores para facilitar la comprensión):

Primera cadena: SELECT * FROM Trabajadores WHERE fecha_entrada < ‘
Segunda cadena: lo que contiene el cuadro de texto del día: txtDia.getText()
Tercera cadena: -
Cuarta cadena: lo que contiene el cuadro de texto del día: txtMes.getText()
Quinta cadena: -
Sexta cadena: lo que contiene el cuadro de texto del año: txtAnio.getText()
Séptima cadena:


Por ejemplo, supongamos que:

-       en el cuadro txtDia se introdujo un 12.
-       en el cuadro txtMes se introdujo un 06.
-       en el cuadro txtAnio se introdujo un 2013.

Entonces, la cadena resultante de la concatenación será:

SELECT * FROM Trabajadores WHERE fecha_entrada < ‘12-06-2013


Es decir, la cadena resultante es una consulta SQL que busca los trabajadores cuya fecha de entrada en la empresa sea anterior al 12 del 06 del 2013.


  1. Ejecuta el programa y prueba a introducir una fecha en las casillas correspondientes. Luego pulsa el botón Antes de y observa como aparecen los trabajadores que entraron antes de la fecha indicada:



  1. Como ejercicio el lector debe programar el botón Después de. Al pulsar este botón, se mostrarán los trabajadores que hayan entrado después de la fecha indicada en los cuadros de texto. El código es prácticamente igual al código del botón Antes de.





CONCLUSIONES:
A través del objeto sentencia podemos ejecutar una consulta SQL en una base de datos.

Esta consulta SQL viene expresada como una cadena.

Se puede construir una consulta SQL a través de la concatenación de varias cadenas. Estas cadenas pueden ser datos introducidos por el usuario en cuadros de texto u otros controles.

Al hacer que el usuario pueda participar en la construcción de la consulta aportando sus propios datos, le damos la posibilidad de que él decida la información que se quiere extraer de la base de datos. De esta manera se consigue que el programa sea más potente.

A tener en cuenta lo siguiente acerca de las consultas SQL ejecutadas desde una aplicación java para acceder a una base de datos en SQL Server:

- Los valores tipo texto se indicarán entre comillas simples (‘).
- El operador LIKE se usa con porcentajes (%).

No hay comentarios.:

Publicar un comentario