Vous êtes sur la page 1sur 17

EJERCICIO GUIADO. JAVA.

ACCESO A BASE DE DATOS


Recapitulando. Ejecucin de consultas desde la aplicacin. Para ejecutar una consulta sobre la base de datos desde tu aplicacin java se tiene que ejecutar una instruccin usando el objeto sentencia de la siguiente forma: ResultSet r = 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 traba a!ores; ResultSet r = sentencia.executeQuery(consulta);

En este cdigo que se acaba de mostrar se crea una cadena llamada consulta. Se le asigna a esta cadena una instruccin SQL para e!traer todos los trabajadores " finalmente se ejecuta dic#a instruccin SQL usando el objeto sentencia. La cadena consulta puede ser construida a trav$s de concatenaciones de cadenas. %bserva atentamente este ejemplo. Es parecido al anterior pero tiene una ligera diferencia:
""Su#ongamos que txt$abla es un cua!ro !e texto String consulta; consulta=select * from % txt$abla.get$ext(); ResultSet r = sentencia.executeQuery(consulta);

En este caso la cadena consulta es la concatenacin de& select * from con lo que contenga el cuadro de texto txtTabla ' es decir txt$abla.get$ext() La gran ventaja de esto es que el usuario podr( escribir el nombre de una tabla cualquiera dentro del cuadro de te!to txtTabla " al ejecutarse este cdigo se e!traer( el contenido de dic#a tabla. Es decir el usuario podr( decidir lo que quiere consultar. El usuario afecta a la construccin de la consulta SQL " por tanto tiene cierto control sobre esta consulta. La construccin de consultas SQL a partir de la concatenacin de cadenas " datos proporcionados por el usuario es algo mu" usado en los programas de base de datos. En esta #oja guiada se insistir( en esta idea.

EJERCICIO GUIADO N ! PLANTEAMIENTO Se quiere reali)ar una aplicacin de base de datos que nos muestre informacin sobre los trabajadores de la empresa *+,E*PS+. Esta aplicacin le dar( al usuario la capacidad de elegir la informacin que quiere e!traer de la base de datos. Es decir el usuario tendr( cierto control sobre las consultas que se realicen. -. Entre en ,et.eans. /rea un nuevo pro"ecto llamado TrabajadoresBD. 0entro de este pro"ecto crea un paquete principal llamado paqueteprincipal " dentro de $l un 12rame llamado ventanaprincipal:

3. +4ade a la ventana un 15e!tPane " un botn de momento:

El botn se llamar( btnTodos " el 15e!tPane se llamar( txtPanel.

6. Para que este programa pueda trabajar con la base de datos *+,E*PS+ tendr( que prepararlo #aciendo lo siguiente: ' ' ' ' /rear la subcarpeta .ase " copiar en ella el fic#ero de base de datos *+,E*PS+.*0. que tiene en la carpeta *is 0ocumentos. +4adir al programa los objetos conexin (Connection) y sentencia (State ent) como globales. /rear el procedimiento PrepararBaseDatos " llamarlo desde el constructor. /errar la cone!in desde el evento !indo!Closing

7ealice estos cuatro pasos que se #an indicado antes de continuar. 8. 9a se puede programar el botn btnTodos" Se pretende que al pulsar este botn apare)ca en el panel txtPanel el contenido de la tabla trabajadores. Para ello programe el siguiente cdigo dentro del actionPer#or ed del botn btnTodos:

Si anali)a este cdigo ver( que es igual al que #emos reali)ado en #ojas anteriores. .(sicamente lo que #ace es lo siguiente:

'
' ' ' '

Ejecuta la consulta :select * from trabajadores order by sueldo; Luego e!trae del $esultSet los campos no bre% apellidos% sueldo y #ec&a. <a" que indicar que al campo sueldo se le cambia el punto decimal por la coma decimal. Por otro lado la fec#a se transforma para que tenga el formato dia=mes=a4o 2inalmente se muestra el resultado de la consulta en el 15e!tPane: t!tPanel. (+ntes de mostrarlo se borra todo lo que #ubiera en el panel)

>. Ejecuta el programa " prueba el funcionamiento de este botn:

+l pulsar el botn se muestran los datos de todos los trabajadores.

?. Se va a mejorar el programa. +4ada un cuadro de te!to llamado txtSueldo " luego tres botones llamados respectivamente btn'ayor% btn'enor " btn(gual. La parte inferior de la ventana quedar( as@:

A. Se pretende que estos botones funcionen de la siguiente forma: ' ' ' ' El usuario introducir( un sueldo en el cuadro de te!to txtSueldo. Luego si pulsa el botn (gual aparecer( en el panel todos los trabajadores que tengan un sueldo igual al introducido. En cambio si pulsa el botn 'ayor aparecer( en el panel todos los trabajadores que tengan un sueldo ma"or que el introducido. 9 si pulsa el botn 'enor aparecer( en el panel todos los trabajadores que tengan un sueldo menor que el introducido.

Se empe)ar( programando el botn (gual.

B. Programe en el actionPer#or ed del botn btn(gual lo siguiente. ()ota* +l cdigo siguiente es pr,ctica ente igual al anterior% solo se &ace un peque-o ca bio" Puede copiar y pegar y luego &acer la odi#icacin que se indica)

Estudiemos detenidamente el cdigo remarcado:


String consulta; consulta = select * from traba a!ores &'ere suel!o = %txtSuel!o.get$ext(); ResultSet r = sentencia.executeQuery(consulta);

+qu@ se crea una variable de te!to llamada consulta " luego se concatena en ella la cadena:
select * from traba a!ores &'ere suel!o =

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

Si el cuadro de te!to del sueldo contuviera un -CCC entonces la cadena resultante ser@a:
select * from traba a!ores &'ere suel!o = ()))

Es decir se constru"e una consulta que busca los sueldos de -CCC euros.

D. Prueba a ejecutar el programa. Escribe un valor -CCC en el cuadro de te!to " luego pulsa el botn (gual. El resultado ser( que aparecen solo los trabajadores que tengan -CCC de sueldo.

+l pulsar el botn (gual se constru"e una consulta usando el contenido del cuadro de te!to txtSueldo. +l ejecutarse la consulta se muestran los trabajadores de -CCC euros.

-C. Programa a#ora el botn 'ayor que de la siguiente forma (El cdigo es pr(cticamente igual al anterior as@ que puedes usar copiar y pegar. Se indica con una flec#a la peque4a diferencia)

/omo se puede observar el cdigo es igual. Simplemente cambia el operador en la cadena que se concatena. +#ora se usa un ayor que. Es decir si el usuario introdujera un -CCC en el cuadro de te!to del sueldo el resultado de la concatenacin en la variable consulta ser@a la siguiente cadena:
select * from traba a!ores &'ere suel!o * ()))

--. Prueba a ejecutar el programa introduciendo el valor -CCC en el sueldo " luego pulsando el botn 'ayor que. El resultado ser( que aparece en el panel de te!to los trabajadores que cobran m(s de -CCC euros. -3. /omo pr(ctica programe el botn 'enor que de forma que muestre aquellos trabajadores que cobren menos de la cantidad introducida en el cuadro de te!to txtSueldo.

-6. Eamos a seguir mejorando el programa. +4ada a#ora el siguiente cuadro de te!to " los siguientes botones:

El cuadro de te!to se llamar( txt)o bre mientras que el botn :(gual a : se llamar( btn)o bre(gual " el botn :Contiene a; se llamar( btnContiene. -8. Estos botones funcionar(n de la siguiente forma: ' ' ' El usuario introducir( un nombre en el cuadro de te!to txt)o bre. Si luego pulsa el botn (gual a entonces aparecer(n todos aquellos trabajadores que tengan e!actamente dic#o nombre. Si en cambio pulsa el botn Contiene a entonces aparecer(n todos aquellos trabajadores cu"o nombre contenga la palabra que se #a"a escrito en el cuadro de te!to.

->. Empe)aremos programando el botn (gual a. Para ello escriba el siguiente cdigo dentro del botn (este cdigo es parecido a los anteriores puede usar copiar " pegar " luego reali)ar las modificaciones pertinentes)

%bserva la modificacin del cdigo. Puedes ver que la consulta SQL se consigue concatenando tres cadenas (se #an puesto en color para facilitar la comprensin): Primera cadena: select * from traba a!ores &'ere nombre = + Segunda cadena: lo que contenga el cuadro de texto: txtNombre.getText() 5ercera cadena: + Supongamos que el cuadro de te!to contiene la palabra /na el resultado de la concatenacin ser@a: select * from traba a!ores &'ere nombre = ,-na, Es decir el resultado de la concatenacin ser@a una consulta SQL que muestra aquellos trabajadores que tengan de nombre +na. NOTA" 7ecuerda que cuando se especifica un valor de tipo te!to en una consulta SQL es necesario que est$ rodeado de comillas simples (F) Esa es la ra)n por la que se tienen que concatenar dos F

-?. Ejecuta el programa " prueba a escribir en el cuadro de te!to del nombre +na. Luego pulsa el botn (gual a&

Se escribe /na en el cuadro de te!to " al pulsar el botn (gual a se constru"e una consulta SQL que muestra a los trabajadores con el nombre +na.

-A. +#ora programaremos el botn Contiene a de forma que el usuario escriba un te!to en el cuadro del nombre " al pulsar el botn Contiene a apare)can todos aquellos trabajadores cu"o nombre contenga el te!to escrito. Por ejemplo si el usuario introduce el te!to :an; en el cuadro al pulsar Contiene a aparecer(n los trabajadores que se llamen: 0uan% Antonio% Antonia% 'anolo% Ana% etc (todos contienen el te!to FanG) -B. Para ello programe lo siguiente en el actionPer#or ed del botn Contiene a (es un cdigo mu" parecido al anterior solo tiene que reali)ar una peque4a modificacin)

En este caso para crear la consulta se concatenan tres cadenas (se indican en color para facilitar la comprensin) Primera cadena: select * from traba a!ores &'ere nombre li.e +H Segunda cadena: lo que contenga el cuadro de texto: txtNombre.getText() 5ercera cadena: H+ Supongamos que escribimos en el cuadro de te!to del nombre la palabra an el resultado de la concatenacin ser@a el siguiente: select * from traba a!ores &'ere nombre li.e +/an/, La condicin nombre like %an% NOTA" /uando se estudiaron las consultas SQL se vio que el operador li1e funcionaba a trav$s de asteriscos. Es decir la forma :correcta; de indicar la condicin anterior ser@a la siguiente: nombre like *an* Sin embargo #a" que decir que el asterisco se debe usar solamente cuando estamos manipulando una base de datos de +ccess desde dentro. En el caso de que queramos acceder a ella desde una aplicacin java se usar(n porcentajes H en ve) de asteriscos. significa que contenga la palabra an.

-D. Ejecuta el programa " prueba a escribir en el cuadro de te!to del nombre el te!to #ra. Luego pulsa el botn Contiene a " comprueba el resultado. 0eben aparecer todos aquellos trabajadores cu"o nombre contenga el te!to #ra" Por ejemplo 2rancisco.

Se escribe #ra se pulsa el botn Contiene a " entonces el programa constru"e una consulta que muestra los trabajadores cu"o nombre contenga #ra.

3C. Sigamos mejorando el programa. +4ade estos cuadros de te!to " estos botones:

t!t0ia

t!t*es

t!t+nio

btn+nterior

btn0espues

3-. El objetivo de estos elementos a4adidos es el siguiente: ' ' ' El usuario introducir( una fec#a (d@a mes " a4o) en los cuadros de te!to txtDia% txt'es% txt/nio. Luego si pulsa el botn /nterior aparecer(n los trabajadores que #a"an entrado en la empresa antes de la fec#a indicada. Si pulsa el botn Despu3s en cambio aparecer(n los trabajadores que #a"an entrado en la empresa despu$s de la fec#a indicada.

33. Empe)aremos programando el botn /nterior. +ccede a su actionPer#or ed e inclu"e el siguiente cdigo (es un cdigo similar al anterior solo tienes que reali)ar un peque4o cambio):

Presta muc#a atencin al cdigo remarcado. En $l se constru"e una consulta que permite mostrar aquellos trabajadores cu"a fec#a de entrada en la empresa sea anterior a la indicada en los cuadros de te!to. Esto se consigue concatenando varias cadenas (se indican a continuacin en distintos colores para facilitar la comprensin)

Primera cadena: select * from traba a!ores &'ere fec'a 0 1 Segunda cadena: lo que contiene el cuadro de texto del es* txt'es"getText() 5ercera cadena: " /uarta cadena: lo que contiene el cuadro de texto del d4a* txtDia"getText() Quinta cadena: " Se!ta cadena: lo que contiene el cuadro de texto del a-o* txt/nio"getText() S$ptima cadena: 1 Por ejemplo supongamos que: ' ' ' en el cuadro txtDia se introdujo un 3C. en el cuadro txt'es se introdujo un -3. En el cuadro txt/nio se introdujo un 3CC>.

Entonces la cadena resultante de la concatenacin ser(:


select * from traba a!ores &'ere fec'a 0 1(2"2)"2))31

Es decir la cadena resultante es una consulta SQL que busca los trabajadores cu"a fec#a de entrada en la empresa sea anterior al 3C del -3 del 3CC? NOTA" 7ecuerda que para que +ccess entienda las fec#as al #acer una consulta SQL es necesario indicarlas en el formato mes"!ia"a4o. Por otro lado recuerda que las fec#as deben estar rodeadas por almo#adillas I 36. Ejecuta el programa " prueba a introducir una fec#a en las casillas correspondientes. Luego pulsa el botn /nterior " observa como aparecen los trabajadores que entraron antes de la fec#a indicada.

Jntroduce un d@a mes " a4o en los cuadros correspondientes. +l pulsar el botn /nterior el programa mostrar( los trabajadores que #a"an entrado antes de esa fec#a.

38. /omo ejercicio se propone que programe el botn Despu3s. +l pulsar este botn se mostrar(n los trabajadores que #a"an entrado antes de la fec#a indicada en los cuadros de te!to. El cdigo es pr(cticamente igual al cdigo del botn /nterior.

CONC#USI$N A t%a&'s del o(jeto sentencia pode)os ejecuta% una consulta S*# en una (ase de datos. Esta consulta S*# &iene e+p%esada co)o una cadena. Se puede const%ui% una consulta S*# a t%a&'s de la concatenacin de &a%ias cadenas. Estas cadenas pueden se% datos int%oducidos po% el usua%io en cuad%os de te+tos u ot%os cont%oles. Al ,ace% -ue el usua%io pueda pa%ticipa% en la const%uccin de la consulta apo%tando sus p%opios datos. le da)os la posi(ilidad de -ue 'l decida la in/o%)acin -ue se -uie%e e+t%ae% de la (ase de datos. De esta )ane%a se consi0ue -ue el p%o0%a)a sea )1s potente. A tene% en cuenta lo si0uiente ace%ca de las consultas S*# ejecutadas desde una aplicacin ja&a pa%a accede% a una (ase de datos de Access" 2 #os &alo%es tipo te+to se indica%1n ent%e co)illas si)ples 3 2 El ope%ado% like se usa con po%centajes 456 en &e7 de con aste%iscos 486 2 #as /ec,as &an %odeadas po% al)o,adillas 496 2 #as /ec,as tienen -ue indica%se con el /o%)ato )es:dia:a;o