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.
- 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:
- Añade a la ventana un JTextPane
y un JButton:
El botón se llamará btnMostrarTrabajadores y el JTextPane se llamará txtPanelTexto.
- 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.
- 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.
- Ejecuta el programa y
prueba el funcionamiento de este botón:
- 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í:
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- 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 ‘.
- Ejecuta el programa y
prueba a escribir en el cuadro de texto del nombre JUAN. Luego pulsa el
botón Igual a:
- 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’).
- 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.
- 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:
- Sigamos mejorando el
programa. Añade estos cuadros de texto y estos botones:
- 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.
- 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.
- 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:
- 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