Sunteți pe pagina 1din 29

TEMA11

INDICE

1.Introduccin.......................................................................................................................................2
1.1.Eldesfaseobjetorelacional........................................................................................................................3
1.2.JDBC............................................................................................................................................................4
1.3.ConectoresoDrivers...................................................................................................................................4
1.4.Instalacindelabasededatos...................................................................................................................5
DescargareinstalarMySQL...............................................................................................................................................5
2.Creacindelastablasenunabasededatos...................................................................................11
CREARTABLASCONMySQL..................................................................................................................11
2.1.LenguajeSQL(I)........................................................................................................................................16
COMANDOSSQLMASUSUALES......................................................................................................................................17
2.1.1.LenguajeSQL(II)...................................................................................................................................................18
3.Establecimientodeconexiones.......................................................................................................19
3.1.Instalarelconectordelabasededatos...................................................................................................19
INSTALARCONECTORJDBCPARAMySQL.......................................................................................................................19
3.2.RegistrarelcontroladorJDBC...................................................................................................................22
4.Ejecucindeconsultassobrelabasededatos................................................................................23
4.1.Recuperacindeinformacin(I)...............................................................................................................23
4.1.1.Recuperacindeinformacin(II).........................................................................................................................24
4.2.Actualizacindeinformacin....................................................................................................................25
4.3.Adicindeinformacin.............................................................................................................................25
4.4.Borradodeinformacin.............................................................................................................................25
4.5.Cierredeconexiones................................................................................................................................26
4.6.Excepciones...............................................................................................................................................26

[PROGRAMACIN]
JosLuisComesaaCabeza2011/2012
ProgramacindelcursodeDesarrollodeAplicacionesWeb

DesarrollodeAplicacionesWeb

Tema11

Gestindebasesdedatosrelacionales.
Caso prctico
Ada ha asignado un proyecto a Mara y a Juan. Se trata de un proyecto importante, y puede suponer
muchas ventas, y por tanto una gran expansin para la empresa.
En concreto, un notario de renombre en el panorama nacional, se dirigi a BK programacin para
pedirles que les desarrolle un programa para su notara, de modo que toda la gestin de la misma,
incluyendo la emisin de las escrituras, se informatizaran. Adems, si el programa es satisfactorio, se
encargar de promocionar la aplicacin ante el resto de sus conocidos notarios, pudiendo por tanto
suponer muchas ventas y por ello, dinero.
Una cuestin vital en la aplicacin es el almacenamiento de los datos. Los datos de los clientes, y de
las escrituras debern guardarse en bases de datos, para su tratamiento y recuperacin las veces
que haga falta.
Como en BK programacin trabajan sobre todo con Java, desde el primer momento Juan y Mara
tienen claro que van a tener que utilizar bases de datos relacionales y JDBC y as lo comentan con
Ada.

DAW

Gestindebasesdedatosrelacionales

1.Introduccin.
Hoy en da, la mayora de aplicaciones
informticas necesitan almacenar y gestionar
grancantidaddedatos.
Esos datos, se suelen guardar en bases de
datos relacionales, ya que stas son las ms
extendidasactualmente.
Las bases de datos relacionales permiten
organizarlosdatosentablasyesastablasydatosserelacionanmediantecamposclave.Ademsse
trabajaconellenguajeestndarconocidocomoSQL,parapoderrealizarlasconsultasquedeseemos
alabasededatos.
Unabasededatosrelacionalsepuededefinirdeunamanerasimplecomoaquellaquepresentala
informacinentablasconfilasycolumnas.
Unatablaesunaseriedefilasycolumnas,enlaquecadafilaesunregistroycadacolumnaesun
campo.Uncamporepresentaundatodeloselementosalmacenadosenlatabla(NSS,nombre,etc.)
Cadaregistrorepresentaunelementodelatabla(elequipoRealMadrid,elequipoRealMurcia,etc.)
Nosepermitequepuedaaparecerdosomsveceselmismoregistro,porloqueunoomscampos
delatablaformanloqueseconocecomoclaveprimaria(atributoqueseeligecomoidentificadorenunatabla,de
maneraquenohayadosregistrosiguales,sinoquesediferencienalmenosenesaclave.Porejemplo,enelcasodeunatablaqueguarda
datosdepersonas,elnmerodelaseguridadsocial,podraelegirsecomoclaveprimaria,puessabemosqueaunquehayadospersonas
llamadas,porejemplo,JuanPrezPrez,estamossegurosdequesunmerodeseguridadsocialserdistinto).

El sistema gestor de bases de datos, en ingls conocido como: Database Management System
(DBMS),gestionaelmodoenquelosdatossealmacenan,mantienenyrecuperan.
En el caso de una base de datos relacional, el sistema gestor de base de datos se denomina:
RelationalDatabaseManagementSystem(RDBMS).
Tradicionalmente, la programacin de bases de datos ha sido como una Torre de Babel: gran
cantidad de productos de bases de datos en el mercado, y cada uno "hablando" en su lenguaje
privadoconlasaplicaciones.
Java,medianteJDBC(Java Database Connectivity. API que permite la ejecucin de operaciones sobre bases de datos desde el
lenguajedeprogramacinJava,independientementedelsistemaoperativodondeseejecuteodelabasededatosalacualseaccede),
permite simplificar el acceso a base de datos, proporcionando un lenguaje mediante el cual las
aplicaciones pueden comunicarse con motores de bases de datos. Sun desarroll este API para el
accesoabasesdedatos,contresobjetivosprincipalesenmente:
9

SerunAPIconsoportedeSQL:poderconstruirsentenciasSQLeinsertarlasdentrodellamadasal
APIdeJava,

AprovecharlaexperienciadelosAPIsdebasesdedatosexistentes,

Sersencillo.

JDBC permite acceder a bases de datos relacionales cuando programamos con Java,
pudiendo as utilizar SQL.
Verdadero

JBDCsirveparaaccederabasesdedatosrelacionalesconJava.

Falso

DesarrollodeAplicacionesWeb

Tema11

Si necesitas refrescar o simplemente aprender el concepto de clave primaria, en la


wikipediapuedesconsultarlo.
http://es.wikipedia.org/wiki/Clave_primaria

1.1.Eldesfaseobjetorelacional.
El desfase objetorelacional, tambin conocido como impedancia objetorelacional, consiste en la
diferencia de aspectos que existen entre la programacin orientada a objetos y la base de datos.
Estosaspectossepuedepresentarencuestionescomo:
9

Lenguajedeprogramacin.Elprogramadordebeconocerellenguajedeprogramacinorientada
aobjetos(POO)yellenguajedeaccesoadatos.

Tiposdedatos:enlasbasesdedatosrelacionalessiemprehayrestriccionesencuantoalostipos
dedatosquesepuedenusar,quesuelensersencillos,mientrasquelaprogramacinorientadaa
objetosutilizatiposdedatosmscomplejos.

Paradigma(unapropuestatecnolgica,unmodelo,adoptadaporunacomunidaddeprogramadoresqueunvocamentetratade
resolverunoovariosproblemasclaramentedelimitados.Tieneunaestrecharelacinconlaformalizacindedeterminadoslenguajes
en su momento de definicin. Un paradigma de programacin est delimitado en el tiempo en cuanto a aceptacin y uso ya que
nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente)deprogramacin.Enel

proceso de diseo y construccin del software se tiene que hacer una traduccin del modelo
orientado a objetos de clases al modelo EntidadRelacin (E/R) puesto que el primero maneja
objetosyelsegundomanejatablasytuplasofilas,loqueimplicaquesetenganquediseardos
diagramasdiferentesparaeldiseodelaaplicacin.
El modelo relacional trata con relaciones y conjuntos debido a su naturaleza matemtica. Sin
embargo,elmodelodeProgramacinOrientadaaObjetostrataconobjetosylasasociacionesentre
ellos.Porestarazn,elproblemaentreestosdosmodelossurgeenelmomentodequererpersistir
losobjetosdenegocio
La escritura (y de manera similar la lectura) mediante JDBC implica: abrir una conexin, crear una
sentencia en SQL y copiar todos los valores de las propiedades de un objeto en la sentencia,
ejecutarlayasalmacenarelobjeto.Estoessencilloparauncasosimple,perotrabajososielobjeto
poseemuchaspropiedades,obiensenecesitaalmacenarunobjetoqueasuvezposeeunacoleccin
deotroselementos.Senecesitacrearmuchomscdigo,ademsdeltediosotrabajodecreacinde
sentenciasSQL.
Este problema es lo que denominbamos impedancia ObjetoRelacional, o sea, el conjunto de
dificultades tcnicas que surgen cuando una base de datos relacional se usa en conjunto con un
programaescritoenconulenguajesdeProgramacinOrientadaaObjetos.
Podemos poner como ejemplo de desfase objetorelacional, un Equipo de ftbol, que tenga un
atributo que sea una coleccin de objetos de la clase Jugador. Cada jugador tiene un atributo
"telfono". Al transformar ste caso a relacional se ocupara ms de una tabla para almacenar la
informacin,implicandovariassentenciasSQLybastantecdigo.

Si no has estudiado nunca bases de datos, ni tienes idea de qu es SQL o el modelo


relacional,seraconvenientequetefamiliarizarasconl.Acontinuacinteindicamosun
tutorialbastanteamenosobreSQLyendondedescribebrevementeelmodelorelacional.
http://www.aulaclic.es/sql/

DAW

Gestindebasesdedatosrelacionales

1.2.JDBC.
JDBCesunAPIJavaquehaceposibleejecutarsentenciasSQL.
DeJDBCpodemosdecirque:
9

ConstadeunconjuntodeclaseseinterfacesescritasenJava.

Proporciona un API estndar para desarrollar aplicaciones de bases de datos con un API Java
pura.

ConJDBC,nohayqueescribirunprogramaparaaccederaunabasededatosAccess,otroprograma
distintoparaaccederaunabasededatosOracle,etc.,sinoquepodemosescribirunnicoprograma
conelAPIJDBCyelprogramaseencargardeenviarlassentenciasSQLalabasededatosapropiada.
Adems,ycomoyasabemos,unaaplicacinenJavapuedeejecutarseenplataformasdistintas.
EneldesarrollodeJDBC,ydebidoalaconfusinquehuboporlaproliferacindeAPI'spropietarios
de acceso a datos, Sun busc los aspectos de xito de un API de este tipo, ODBC (Open Database
Connectivity.APIdeaccesoadatos,desarrolladoporMicrosoft.conlaideadetenerunestndarparaelaccesoabasesdedatosenentorno
Windows).

ODBC se desarroll con la idea de tener un estndar para el acceso a bases de datos en entorno
Windows.
Aunque la industria ha aceptado ODBC como medio principal para acceso a bases de datos en
Windows,ODBCnoseintroducebienenelmundoJava,debidoalacomplejidadquepresentaODBC,
yqueentreotrascosashaimpedidosutransicinfueradelentornoWindows.
El nivel de abstraccin (Uno de los objetivos fundamentales de una base de datos es proporcionar a los usuarios una visin
abstractadelosdatos.Esdecir,elsistemaocultaciertosdetallesrelativosalaformaenquesealmacenanymantienenlosdatos.Estose
logra definiendo tres niveles de abstraccin en los que puede considerarse la base de datos: fsico, conceptual y de visin) al que

trabaja JDBC es alto en comparacin con ODBC, la intencin de Sun fue que supusiera la base de
partidaparacrearlibrerasdemsaltonivel.
JDBCintentasertansimplecomoseaposible,peroproporcionandoalosdesarrolladoreslamxima
flexibilidad.

JDBC es la versin de ODBC para Linux.


Verdadero

Falso

ODBCsedesarrollparaserunestndarparaelaccesoabasesdedatosenentornoWindows.

1.3.ConectoresoDrivers.
ElAPIJDBCvienedistribuidoendospaquetes:
9

java.sql,dentrodeJ2SE

javax.sql,extensindentrodeJ2EE

Unconectorodriveresunconjuntodeclasesencargadasdeimplementarlas
interfacesdelAPIyaccederalabasededatos.
Parapoderconectarseaunabasededatosylanzarconsultas,unaaplicacin
necesita tener un conector adecuado. Un conector suele ser un fichero .jar que contiene una
implementacindetodaslasinterfacesdelAPIJDBC.

DesarrollodeAplicacionesWeb

Tema11

Cuandoseconstruyeunaaplicacindebasededatos,JDBCocultalosdetallesespecficosdecada
basededatos,demodoqueleprogramadorseocupeslodesuaplicacin.
Elconectorloproporcionaelfabricantedelabasededatosobienuntercero.
El cdigo de nuestra aplicacin no depende del driver, puesto que trabajamos contra los
paquetesjava.sqlyjavax.sql.
JDBCofrecelasclaseseinterfacespara:
9

Establecerunaconexinaunabasededatos.

Ejecutarunaconsulta.

Procesarlosresultados.

Ejemplo:
// Establece la conexin
Connection con = DriverManager.getConnection (
jdbc:odbc:miBD, miLogin, miPassword);
// Ejecuta la consulta
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(SELECT nombre, edad FROM Jugadores);
// Procesa los resultados
while (rs.next()) {
String nombre = rs.getString(nombre);
int edad = rs.getInt(edad);
}

Enprincipio,todoslosconectoresdebensercompatiblesconANSISQL2EntryLevel(ANSISQL2se
refiere a los estndares adoptados por el American National Standards Institute (ANSI) en 1992.
Entry Level se refiere a una lista especfica de capacidades de SQL). Los desarrolladores de
conectorespuedenestablecerquesusconectoresconocenestosestndares.

ListasobrelosconectoresJDBCparaaccederamuchaslasbasesdedatoslistadas.
http://www.devx.com/tips/Tip/28818

1.4.Instalacindelabasededatos.
Lo primero que tenemos que hacer, para poder realizar consultas en una base de datos, es
obviamente, instalar la base de datos. Dada la cantidad de productos de este tipo que hay en el
mercado,esimposibleexplicarlainstalacindetodas.Asquevamosaoptarporuna,enconcreto
porMySQLyaqueesunsistemagestorgratuitoyquefuncionaenvariasplataformas.
ParainstalarMySQLenWindowspuedesseguirlospasosquetedetallamosacontinuacin

DescargareinstalarMySQL

DAW

Gestindebasesded
datosrelacio
onales

DesarrollodeApllicacionesW
Web

Tema11
1

DAW

Gestindebasesdedatosrelacionales

DesarrollodeAplicacionesWeb

Tema11

DAW

Gestindebasesdedatosrelacionales

Si utilizas Linux, el sitio de descarga es el mismo que el indicado en la presentacin


anterior,ylainstalacinlapuedeshacerconlospasosqueteindicanenelenlace:
http://www.alcancelibre.org/staticpages/index.php/comomysqlquickstart
Para usar programar accesos a MySQL hay que tener el driver JDBC para MySQL en
nuestra aplicacin.
Verdadero

Falso

Denoserasserimposibleconectarnosalabasededatos.

Para probar con otras bases de datos, puedes instalar tambin Oracle. Aqu puedes ver
comoseinstala.
http://abenzoar.wordpress.com/oracle/instalacionbasededatosoracle10g/

10

DesarrollodeAplicacionesWeb

Tema11

2.Creacindelastablasenunabasededatos.
Caso prctico
Mara, Ada y Juan han realizado concienzudamente el diseo de las tablas necesarias para la base
de datos de la aplicacin de notaras.
Tambin se han decantado por el sistema gestor de bases de datos a utilizar. Emplearn un sistema
gestor de bases de datos relacional. Una vez instalado el sistema gestor, tendrn que programar los
accesos a la base de datos para guardar los datos, recuperarlos, realizar las consultas para los
informes y documentos que sean necesarios, etc.

EnJavapodemosconectarnosymanipularbasesdedatosutilizandoJDBC.Perolacreacinensdela
base de datos debemos hacerla con la herramienta especfica para ello. Normalmente ser el
administradordelabasededatos,atravsdelasherramientasqueproporcionanelsistemagestor,
el que crear la base de datos. No todos losdriversJDBC soportan la creacin de la base de datos
medianteellenguajededefinicindedatos(DDL).
Normalmente, cualquier sistema gestor de bases de datos incluye asistentes grficos para crear la
basededatosconsustablas,claves(unsubconjuntodelconjuntodeatributoscomunesenunacoleccindeentidades,que
permiteidentificarunvocamentecadaunadelasentidadespertenecientesadichacoleccin),ytodolonecesario.
Tambin, como en el caso deMySQL, o de Oracle, y la mayora de sistemas gestores de bases de
datos, se puede crear la base de datos, desde lalnea de comandos (mtodo que permite a los usuarios dar
instrucciones a algn programa informtico por medio de una lnea de texto simple)deMySQLo de Oracle, con las
sentenciasSQLapropiadas.
VamosutilizarelsistemagestordebasededatosMySQL,porserunproductogratuitoydefciluso,
ademsdemuypotente.

Puedesdescargarteeinstalarlaherramientagrficaquepermiteentreotrascosastrabajar
para crear tablas, editarlas, aadir datos a las tablas, etc., conMySQL. Aqu puedes
descargarlo:
http://www.mysql.com/downloads/workbench

Unavezdescargadoeinstalado,veamoscmocrearpasoapasounesquemadebasede
datos conMySQL WorkBench, para usar en la aplicacin de notaras, y una tabla, la de
clientes.Lopuedesverenlasiguientepresentacin:

CREARTABLASCONMySQL
9 EjecutamosMySQLWorkbenchynos
apareceelinterfazdelaaplicacinconsu
menytresgrandesbloques:SQL
Development,DataModelingyServer
Administration.
9 EnelprimerbloqueseleccionamosNew
Connectionparacrearunanuevaconexin.
9 Laideaesconectarconelservidordebase
dedatosinstaladoennuestroequipooen
otroequipodelared(inclusointernet),

11

DAW

Gestind
debasesded
datosrelacio
onales
napantallap
pidiendolosdatos
9 Nossapareceun
dellaconexin:
9 Nom
mbredelaco
onexin:led
daremosporr
ejem
mploelnom
mbredenotaaria
9 Mtododeconeexin:dejareemosTCP/IP
Ptaly
com
moest.
9 Hosstname:IPonombredellequipo,en
nue
estrocaso,se
ervidorlocall,bastarco
on
pon
nerlocalhosttodejarcom
mopone
127
7.0.0.1
9 Porrt:EselpuerttoTCP/IPqu
ueutilizael
servvidor.Porde
efectoes330
06.Lodejam
mos
tam
mbin.
9 Esquemapordeefecto:elno
ombredel

esquemadonde
eseguardarrnnuestras
tablas.Lodejam
mosenblancco.
botnOk
9 Pulssaremoselb

9 Nossapareceun
napantallacomolainiciaal
peroconlaconexincreada.
9 PincchamosenO
OpenConnecctiontostarrt
que
eringparaab
brirlaconexin.

9 Nossapareceun
napantallad
donde
sele
eccionamosenunalistadesplegable
ela
con
nexinnotaria.
9 Hayydosbotone
es:OkparaaaceptaryCancel
paracancelarlaaoperacin.
Ok.
9 PincchamosenO

9 Apaarecelapanttallapindin
ndonosla
con
ntraseadeu
usuarioadm
ministrador.
9 Selaintroducim
mosypinchaamosenelb
botn
OK..

12

DesarrollodeApllicacionesW
Web

Tema11
1

9 Nosapareceunapan
ntallaconele
esquema
pordefeccto:test.
9 Creamosunnuevoessquemapincchandoen
eliconoaamarilloconformadebaase4de
datosque
eapareceen
nmitaddep
pantalla.

9 Apareceu
unapantallaaquenospid
deel
nombred
delesquemaaypermitesseleccionar
eljuegod
decaracterees.
9 Escribimo
osnotarbdyypulsamose
enelbotn
Apply

9 Apareceu
unapantallaamostrando
ola
sentenciaaSQLqueseevaaejecutaaryconlos
botonesp
paraaplicarllaocancelarrla.
9 Pulsarem
mosenaplicaarlaparacreaarel
esquemaa.

13

DAW

Gestind
debasesded
datosrelacio
onales

9 Apaareceunapaantallaquen
nosinformadel
xittodelaoperracinynospermiteverrel
log..
9 Pincchamosene
elbotnFinishparasalirrde
ellaa.

9 Apaareceunapaantallaconeelnombrede
el
esquemacreadoytresboto
ones:Apply,,
RevvertyClose.
9 PulssamosClose
eparasalirdeestapantaalla

9 Vem
mosenlapantallaqueapareceel
esquemacreado.
9 Enllapartedelaaderechadeelaventana,bajo
ele
esquemavem
mosqueapaareceunacarrpeta
llam
madatables

14

DesarrollodeAplicacionesWeb

Tema11

9 NossituamossobrelacarpetaTablesy
pulsamoselbotnderechodelratn.
9 Apareceunmenyseleccionamosla
primeraopcin(CrearTable)paracrear
nuestratabla.

9 Aparecelapantallaquenospermitecrear
lastablas.
9 Tienevariaspestaasenlaparteinferior,
pordefectoapareceenlapestaaTable.
9 Enlapartedearribaescribiremosel
nombredelatabla:Cliente

9 Pinchandoenlapestaacolumns,podemos
aadirlascolumnasquesemuestran:
idcliente,nif,nombre,apellidos,direccin,
cdigopostal,telfonoycorreoelectrnico.
9 AparecemarcadaidClientepordefecto,
comolaclaveprimaria.
9 PulsamoselbotndeAplicar

15

DAW

Gestind
debasesded
datosrelacio
onales

9 Apaareceunapaantallainform
mndonosd
dela
sentenciaSQLq
quesevaaeejecutarparaa
creaarlatabla.H
Haydosboto
onesparapu
ulsar:
Can
ncelparacan
ncelaroApplySQLpara
efecctuarlacreaacin.
9 PulssaremosApp
plySQL

9 Apaareceunapaantallainform
mndonosd
del
xittodelaoperracinypulssamosFinish
hpara
salirdeella.
9 Lattablasecre
sinproblem
mas

AqupuedesverunvvdeosobrelainstalaciindelabaasededatosOracleExxpressycreacin
detablas.
http
p://www.yo
outube.com
m/watch?feaature=playe
er_embedded&v=H8KiNPpq73o

2.1.LenguajeSQL
L(I).
Cmo le pedimos
p
al Sistema
S
Gesttor de Bases de Datos Relacional (SSGBDR), en concreto en
n este
caso,aldeM
MySQL,quenosproporccionelainforrmacinquenosinteresaadelabased
dedatos?
SeutilizaellenguajeSQ
QL(StructureedQueryLan
nguage)parainteractuarconelSGBD
DR.
SQL es un lenguajenoprocedimen
ntalen el cual se le indica al SGBDR
Rququerem
mos obtener yno
cmohacerrlo.ElSGBDR
Ranalizanueestraordenyysiescorrecctasintcticaamentelaejeecuta.
Elestudiod
deSQLnosllevaramuch
homsque unaunidad,yesobjetodeestudio enotrosm
dulos
de este cicclo formativvo. Pero com
mo resulta imprescindib
ble para po
oder continu
uar, haremos una
mnimaintrroduccinso
obrel.
Loscomand
dosSQLsepu
uedendividirendosgran
ndesgrupos:
9

Los que se utilizaan paradefinir las esttructuras de


e datos, llaamados com
mandosDDL(Data
DefinitionLanguagee).

16

DesarrollodeAplicacionesWeb

Tema11

9 Los que se utilizan paraoperar con los datos almacenados en las estructuras,
llamadosDML(DataManipulationLanguage).
EnlasiguientetablaencontrarsalgunosdeloscomandosSQLmsutilizados.

CREATETABLE

INSERTINTO

DELETE

UPDATE

SELECT

COMANDOSSQLMASUSUALES
Descripcin:
Seutilizaparacrearunatablaespecificandoelnombredelamisma.Alcrear
latablaesnecesarioespecificarcadaunadelascolumnasquelaformanyel
tipodedatocorrespondiente.
Sintaxis:
CREATETABLE<tabla>(
<columna1><tipodedato>,
<columna2><tipodedato>,,
<columnaN><tipodedato>)
Ejemplo:
CREATETABLEempleado(
nombreCHAR(45),f_nacimientoDATE,departamentoNUMBER(2),
salarioNUMBER(6,2))
Descripcin:
Seutilizaparaaadirregistros(filas)aunatabla.
Sintaxis:
INSERTINTO<tabla>VALUES(
<valorcolumna1>,
<valorcolumna2>,,
<valorcolumnaN>)
Ejemplo:
INSERTINTOempleadoVALUES(JosGmez,10/02/1977,15,1200.00)
Descripcin:
Seutilizaparaborrarregistros(filas)deunatabla.
Sintaxis:
DELETEFROM<tabla>WHERE<condicin>
Ejemplo:
DELETEFROMempleadoWHEREnombre=JosPrez)
Descripcin:
Seutilizaparamodificardatosdeunatabla.
Sintaxis:
UPDATE<tabla>SET<columna>=<expresin>WHERE<condicin>
Ejemplo:
UPDATEempleado
SETsalario=salario+100
WHEREnombre=JosNavarro;
Descripcin:
Seutilizaparalistarunconjuntodedatosdeunaovariastablas.
Habitualmenteseasociaalasconsultassobrelabasededatos.
Sintaxis:
SELECT<listadecolumnas>FROM<tabla>WHERE<condicin>
Ejemplo:
SELECTnombre,salarioFROMempleadoWHEREsalario>1000;
Listanombreysalariodetodoslosempleadosquecumplenlacondicin,es
decir,cuyosalarioessuperiora1000.

17

DAW

Gestindebasesdedatosrelacionales

EnesteenlaceencontrarsdeunamanerabreveperointeresantelahistoriadelSQL
http://www.htmlpoint.com/sql/sql_04.htm
Con las consultas SQL hay que especificar paso a paso cmo recuperar cada dato de la
base de datos.
Verdadero

Falso

Bastacondecirlequdatosqueremosyelsistemagestorseencargadeobtenerlos

2.1.1.LenguajeSQL(II).
La primera fase del trabajo con cualquier base de datos comienza con sentencias DDL, puesto que
antesdepoderalmacenaryrecuperarinformacindebemosdefinirlasestructurasdondeagruparla
informacin.LasestructurasbsicasconlasquetrabajaSQLsonlastablas.
Comohemosvistoantes,unatablaesunconjuntodeceldasagrupadasenfilasycolumnasdondese
almacenanelementosdeinformacin.
Antesdellevaracabolacreacindeunatablaconvieneplanificar:nombredelatabla,nombrede
cada columna, tipo y tamao de los datos almacenados en cada columna, informacin adicional,
restricciones,etc.
Hayquetenerencuentatambinciertasrestriccionesenlaformacindelosnombresdelastablas:
longitud.Normalmente,aunquedependendelsistemagestor,sueletenerunalongitudmximade
30 caracteres, no puede haber nombres de tabla duplicados, deben comenzar con un carcter
alfabtico,permitircaracteresalfanumricosyelguinbajo'_',ynormalmentenosedistingueentre
maysculasyminsculas.
Porejemploparacrearunatabladedepartamentospodramoshacer:
CREATE TABLE departa (
cod_dep number(3),
nombre varchar2(15) not null,
loc varchar2(10),
constraint dep_pk primary key (cod_dep),
constraint dep_loc check
(loc in ('Madrid', 'Barcelona', 'Murcia'))
);

donde creamos la tabla con cod_dep como clave primaria. Adems, se aade una restriccin para
comprobar que cuando se est dando de alta un registro, lo que se escriba en el campo loc sea
Madrid,BarcelonaoMurcia.
Yunatabladeempleados,teniendoencuentaeldepartamentoenelquetrabajen:
CREATE TABLE emp (
cod_emp number(3),
nombre varchar2(10) not null,
oficio varchar2(11),
jefe number(3),
fecha_alta date,
salario number(10),
comision number(10),
cod_dep number(3),
constraint emp_pk primary key (cod_emp),
constraint emp_fk foreign key (cod_dep) references departa(cod_dep)
on delete cascade,
constraint emp_ck check (salario > 0)
);

En el caso de esta tabla, se puede ver que hay una restriccin para comprobar que el salario sea
mayorque0.

18

DesarrollodeAplicacionesWeb

Tema11

3.Establecimientodeconexiones.
Caso prctico
Tanto Juan como Mara saben que trabajar con bases de datos relacionales en Java es
tremendamente sencillo, por lo que establecer una conexin desde un programa en Java, a una base
de datos, es muy fcil.
Juan le comenta a Mara: -Empleando la tecnologa slo necesitamos dos simples sentencias Java
para conectar la aplicacin a la base de datos. Mara, preprate que en un periquete tengo lista la
conexin con la base de datos y salimos a tomar un caf.

Cuandoqueremosaccederaunabasededatosparaoperarconella,loprimeroquehayquehaceres
conectarseadichabasededatos.
En Java, para establecer una conexin con una base de datos podemos utilizar el
mtodo getConnection() de la clase DriverManager . Este mtodo recibe como parmetro la URL de
JDBCqueidentificaalabasededatosconlaquequeremosrealizarlaconexin.
Laejecucindeestemtododevuelveunobjeto Connection querepresentalaconexinconlabase
dedatos.
Cuando se presenta con una URL especfica, DriverManager itera sobre la coleccin
dedriversregistrados hasta que uno de ellos reconoce la URL especificada. Si no se encuentra
ningndriveradecuado,selanzauna SQLException .
Veamosunejemplocomentado:
public static void main(String[] args) {
try {
// Cargar el driver de mysql
Class.forName("com.mysql.jdbc.Driver");
// Cadena de conexin para conectar con MySQL en localhost,
//seleccionar la base de datos llamada test
// con usuario y contrasea del servidor de MySQL: root y admin
String connectionUrl = "jdbc:mysql://localhost/test?" +
"user=root&password=admin";
// Obtener la conexin
Connection con = DriverManager.getConnection(connectionUrl);
} catch (SQLException e) {
System.out.println("SQL Exception: "+ e.toString());
} catch (ClassNotFoundException cE) {
System.out.println("Excepcin: "+ cE.toString());
}
}

SiprobamosesteejemploconNetBeans,ocualquierotroentorno,ynohemosinstaladoelconector
paraMySQL, en la consola obtendremos el mensaje: Excepcin:java.lang.ClassNotFoundException:
com.mysql.jdbc.Driver.

3.1.Instalarelconectordelabasededatos.
En la siguiente tabla vamos a ver cmo descargarnos el conector odriverque necesitamos para
trabajar conMySQL. Como vers, tan slo consiste en descargar un archivo, descomprimirlo y
desdeNetBeansaadirelfichero.jarqueconstituyeelconectorquenecesitamos.
INSTALARCONECTORJDBCPARAMySQL

19

DAW

Gestind
debasesded
datosrelacio
onales

9 Conelnaveegadoracced
demosala
direccin:
9

http://www.m
mysql.com/dow
wnloads/conector/j/

9 Pulsaremossenelbotn
nazulDownlo
oad
quesevealaderechad
delapantallaa.
Estdisponibleen.zipyyen.tar

9 Enlapantallaqueapareecepincham
mosen
lapartedeabajoparap
poderselecciionar
losservidorresdedescarrgadondese
e
alojaelconectorJDBC

9 Elegimosun
nodelosserrvidoresque
aparecenypinchamoseenFTPque
aparecealaaderechadeelapantalla

9 Unavezdesscargadoyd
descomprimidoel
archivo,nossfijamosenelficheroqu
ue
nosinteresaaqueesel.jjarqueapare
ece
sealadoen
nlaimagen

20

DesarrollodeApllicacionesW
Web

Tema11
1

9 EnNeetBeans,situ
undonosen
nelnombre
delproyectopulssamoselbotnderecho
delraatn
9 Enelmenconteextualqueap
parece
selecccionamosPrroperties.

9 SelecccionamosellnododelassLibreras
delproyecto
hamosenelbotnJAR/Folder
9 Pinch
9 Buscaamosyelegimoselfichero
comeentadoanterriormente,el.jar

9 TanssoloquedapulsarOkyhe
emos
acabaado

Portaanto,comoyyahemosco
omentadoan
nteriormente
e,entreelprrogramaJavayelSistem
maGestordee
la Baase de Datos (SGBD) see intercala el
e conector JDBC. Este conector ess el que implementa laa
funcionalidadde lasclasesdeaccesoad
datosyprop
porcionalaccomunicacinentreelA
APIJDBCyell
D.
SGBD
Lafun
ncindelcon
nectorestraaducirloscom
mandosdelA
APIJDBCalp
protocolonaativodelSGB
BD.

21

DAW

Gestindebasesdedatosrelacionales

3.2.RegistrarelcontroladorJDBC.
Al fin y al cabo ya lo hemos visto en el ejemplo de cdigo que ponamos antes, pero incidimos de
nuevo.Registrarelcontroladorquequeremosutilizarestanfcilcomoescribirunalneadecdigo.
Hayqueconsultarladocumentacindelcontroladorquevamosautilizarparaconocerelnombrede
laclasequehayqueemplear.EnelcasodelcontroladorparaMySQLes" com.mysql.jdbc.Driver ",o
sea,quesetratadelaclase Driver queestenelpaquete com.mysql.jdbc delconectorquehemos
descargado,yquehasobservadoquenoesmsqueunalibreraempaquetadaenunfichero.jar.
Lalneadecdigonecesariaenestecaso,enlaaplicacinJavaqueestemosconstruyendoes:
// Cargar el driver de mysql
Class.forName("com.mysql.jdbc.Driver");

Unavezcargadoelcontrolador,esposiblehacerunaconexinalSGBD.
Hay que asegurarse de que sinoutilizramosNetBeansuotroIDE,paraaadirel.jarcomohemos
visto,entonceselarchivo.jarquecontieneelcontroladorJDBCparaelSGBDhabraqueincluirloen
el CLASSPATH que emplea nuestra mquina virtual, o bien en el directorio ext delJREde nuestra
instalacindelJDK.
Hay una excepcin en la que no hace falta ni hacer eso: en caso de utilizar un acceso mediante
puenteJDBCODBC,yaqueesedriverestincorporadodentrodeladistribucindeJava,porloque
noesnecesarioincorporarloexplcitamenteenelclasspath(variabledeentornoqueindicaalamquinavirtualde
Java dnde buscar las clases definidas por el usuario y los paquetes cuando se ejecutan los programas Java)de una aplicacin
Java.Porejemplo,seraelcasodeaccederaunabasededatosMicrosoftAccess.

22

DesarrollodeAplicacionesWeb

Tema11

4.Ejecucindeconsultassobrelabasededatos.
Caso prctico
Ada est echando una mano a Juan y Mara en la creacin de consultas, para los informes que la
aplicacin de notara debe aportar a los usuarios de la misma.
Hacer consultas es una de las facetas de la programacin que ms entretiene a Ada, le resulta muy
ameno y fcil. Adems, y dada la importancia del proyecto, cuanto antes avancen en l, mucho mejor.
Por suerte, los tres: Ada, Mara y Juan tienen experiencia en consultas SQL y saben que, cuando se
hace una consulta a una base de datos, hay que afinar y hacerla lo ms eficiente posible, pues si se
descuidan el sistema gestor puede tardar mucho en devolver los resultados. Adems, algunas
consultas pueden devolver un conjunto de registros bastante grande, que puede resultar difcil de
manejar desde el programa, ya que por norma general tendremos que manejar esos datos registro a
registro.

Para operar con una base de datos ejecutando las consultas necesarias, nuestra aplicacin deber
hacerlasoperacionessiguientes:
9
9
9
9
9

Cargarelconectornecesarioparacomprenderelprotocoloqueusalabasededatosencuestin.
Establecerunaconexinconlabasededatos.
EnviarconsultasSQLyprocesarelresultado.
Liberarlosrecursosalterminar.
Gestionarloserroresquesepuedanproducir.

Podemosutilizarlossiguientestiposdesentencias:
9
9
9

Statement :parasentenciassencillasenSQL.
PreparedStatement :paraconsultaspreparadas,comoporejemplolasquetienenparmetros.
CallableStatement :paraejecutarprocedimientosalmacenadosenlabasededatos.

ElAPIJDBCdistinguedostiposdeconsultas:
9

Consultas: SELECT . Para las sentencias de consulta que obtienen datos de la base de datos, se
emplea el mtodo ResultSet executeQuery(String sql) . El mtodo de ejecucin del comando
SQL devuelve un objeto de tipo ResultSet que sirve para contener el resultado del comando
SELECT ,yquenospermitirsuprocesamiento.
9 Actualizaciones: INSERT , UPDATE , DELETE , sentencias DDL. Para estas sentencias se utiliza el
mtodo executeUpdate(String sql)

Para poder enviar consultas a la base de datos hemos tenido que conectarnos a ella
previamente.
Verdadero

Falso

Ases,hayquecargareldriveryestablecerlaconexin

4.1.Recuperacindeinformacin(I).
Las consultas a la base de datos se realizan con sentencias SQL que van"embebidas"en otras
sentencias especiales que son propias de Java. Por tanto, podemos decir que las consultas SQL las
escribimos como parmetros de algunos mtodos Java que reciben el String con el texto de la
consultaSQL.
Lasconsultasdevuelvenun ResultSet ,queesunaclasejavaparecidaaunalistaenlaquesealojael
resultadodelaconsulta.Cadaelementodelalistaesunodelosregistrosdelabasededatosque
cumpleconlosrequisitosdelaconsulta.
El ResultSet nocontienetodoslosdatos,sinoquelosvaobteniendodelabasededatossegnse
vanpidiendo.Larazndeestoesevitarqueunaconsultaquedevuelvaunacantidadmuyelevadade
registros,tardemuchotiempoenobtenerseysaturelamemoriadelprograma.

23

DAW

Gestindebasesdedatosrelacionales

Conel ResultSet haydisponiblesunaseriedemtodosquepermitenmovernoshaciadelanteyhacia


atrsenlasfilas,yobtenerlainformacindecadafila.
Porejemplo,paraobtener:nif,nombre,apellidosytelfonodelosclientesqueestnalmacenados
enlatabladelmismonombre,delabasededatosnotarbdquesecreanteriormente,haramosla
siguienteconsulta:
// Preparamos la consulta y la ejecutamos
Statement s = n.createStatement();
ResultSet rs = s.executeQuery ("SELECT NIF, NOMBRE,"
+ "APELLIDOS, TELFONO FROM CLIENTE");

Elmtodo next() del ResultSet hacequedichopunteroavancealsiguienteregistro.Siloconsigue,el


mtodo next() devuelve true . Si no lo consigue, porque no haya ms registros que leer, entonces
devuelve false .

Puedesconsultartodoslosmtodosquesoporta ResulSet ,ademsdemsinformacin,en


ladocumentacindeOracle:
http://download.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html

4.1.1.Recuperacindeinformacin(II).
Elmtodo executeQuery devuelveunobjeto ResultSet parapoderrecorrerelresultadodelaconsulta
utilizandouncursor(estaformadoporunconjuntoderegistrosdevueltosporunainstruccinSQLdetipoSELECT).
Paraobtenerunacolumnadelregistroutilizamoslosmtodos get .Hayunmtodo get ...paracada
tipobsicoJavayparalascadenas.
Un mtodo interesante es wasNull que nos informa si el ltimo valor ledo con un mtodogetes
nulo.
Cuando trabajamos con el ResultSet , en cada registro, los mtodos getInt() , getString() ,
getDate() , etc., nos devuelve los valores de los campos de dicho registro. Podemos pasar a estos
mtodos un ndice (que comienza en 1) para indicar qu columna de la tabla de base de datos
deseamos,obien,podemosusarun String conelnombredelacolumna(talcualestenlatablade
basededatos).
// Obtener la conexin
Connection con = DriverManager.getConnection(connectionUrl);
// Preparamos la consulta
Statement s = con.createStatement();
ResultSet rs = s.executeQuery ("SELECT NIF, NOMBRE,"
+ "APELLIDOS, TELFONO FROM CLIENTE");
// Iteramos sobre los registros del resultado
while (rs.next())
System.out.println (rs.getString("NIF") + " " +
rs.getString (2) + " " +
rs.getString (3) + " " +
rs.getString (4)) ;

Para obtener un entero almacenado en uno de los campos de un registro, trabajando con
el ResulSet emplearemos el mtodo getInt().

Verdadero

Esoes.HayungetString()paracadenas,getDate()parafechas,etc.

24

Falso

DesarrollodeAplicacionesWeb

Tema11

4.2.Actualizacindeinformacin.

Respectoalasconsultasdeactualizacin, executeUpdate ,retornanelnmeroderegistrosinsertados,


registrosactualizadosoeliminados,dependiendodeltipodeconsultaquesetrate.
SupongamosquetenemosvariosregistrosenlatablaCliente,delabasededatosnotarbdconlaque
seguimostrabajando.Siquisiramosactualizareltelfonodeltercerregistro,quetieneidCLIENTE=3
yponerlecomonuevotelfonoel968610009tendramosquehacer:
String connectionUrl = "jdbc:mysql://localhost/notarbd?" +
"user=root&password=admin";
// Obtener la conexin
Connection con = DriverManager.getConnection(connectionUrl);
// Preparamos la consulta y la ejecutamos
Statement s = con.createStatement();
s.executeUpdate("UPDATE CLIENTE SET telfono='968610009' WHERE idCLIENTE=3");
// Cerramos la conexin a la base de datos.
con.close();

4.3.Adicindeinformacin.
SiqueremosaadirunregistroalatablaCliente,delabasededatosconlaqueestamostrabajando
tendremos que utilizar la sentencia INSERT INTO de SQL. Al igual que hemos visto en el apartado
anterior, utilizaremos executeUpdate pasndole como parmetro la consulta, de insercin en este
caso.
As,unejemplosera:
// Preparamos la consulta y la ejecutamos
Statement s = con.createStatement();
s.executeUpdate( "INSERT INTO CLIENTE" +
" (idCLIENTE, NIF, NOMBRE, APELLIDOS, DIRECCIN, CPOSTAL, TELFONO, CORREOELEC)" + " VALUES
(4,
'66778998T',
'Alfredo',
'Gates
Gates',
'C/
Pirata
23','20400',
'891222112',
'prueba@eresmas.es' )") ;

Al aadir registros a una tabla de una base de datos, tenemos que pasar como
parmetro al executeUpdate(), una sentencia SQL del tipo: DELETE...

Verdadero

Falso

SeledebepasarunasentenciadetipoINSERTINTO

4.4.Borradodeinformacin.
Cuandonosintereseeliminarregistrosdeunatabladeunabasededatos,emplearemoslasentencia
SQL: DELETE .As,porejemplo,siqueremoseliminarelregistroalatablaCliente,denuestrabasede
datosycorrespondientealapersonaquetieneelnif:66778998T,tendremosqueutilizarelcdigo
siguiente.
// Preparamos la consulta y la ejecutamos
Statement s = con.createStatement();
numReg = res.executeUpdate( "DELETE FROM CLIENTE WHERE NIF= '66778998T' " );
// Informamos del nmero de registros borrados
System.out.println ("\nSe borr " + numReg + " registro\n") ;

25

DAW

Gestindebasesdedatosrelacionales

Al ejecutar el borrado de un registro mediante executeUpdate(), no podemos saber si


el borrado elimin alguna fila o no.

Verdadero

Falso

Efectivamentepodemossaberloporquesedevuelveelnmeroderegistrosborrados,comohemosvistoenelcdigodelejemplo
anterior

4.5.Cierredeconexiones.
Lasconexionesaunabasededatosconsumenmuchosrecursosenelsistemagestorporendeenel
sistema informtico en general. Por ello, conviene cerrarlas con el mtodo close() siempre que
vayanadejardeserutilizadas,enlugardeesperaraqueelgarbagecollectordeJavalaselimine.
Tambin conviene cerrar las consultas ( Statement y PreparedStatement ) y los resultados ( ResultSet )
paraliberarlosrecursos.

Noblecosaes,aunparaunanciano,elaprender.
Sfocles.

EnelsiguienteenlacepuedesvercmoserealizaunagestindelaconexinconOracle,
desde el registro del conector hasta el cierre de la misma. Tambin se comenta
sobreMySQL.
http://casidiablo.net/javadatabaseconnectivity/

4.6.Excepciones.
Entodaslasaplicacionesengeneral,yportantoenlasqueaccedenabasesdedatosenparticular,
nospuedeocurrirconfrecuenciaquelaaplicacinnofunciona,nomuestralosdatosdelabasede
datosquedesebamos,etc.
Es importante capturar las excepciones que puedan ocurrir para que el programa no aborte de
manera abrupta. Adems, es conveniente tratarlas para que nos den informacin sobre si el
problema es que se est intentando acceder a una base de datos que no existe, o que el
servicioMySQLnoestarrancado,oquesehaintentadohaceralgunaoperacinnopermitidasobre
labasededatos,comoaccederconunusuarioycontraseanoregistrados,...
Por tanto es conveniente emplear el mtodo getMessage() de la clase SQLException para recoger y
mostrar el mensaje de error que ha generadoMySQL, lo que seguramente nos proporcionar una
informacinmsajustadasobreloqueestfallando.
Cuandoseproduceunerrorselanzaunaexcepcindeltipo java.sql.SQLException .
9

Es importante quelas operaciones de acceso a base de datosestndentro de un bloque trycatch quegestionelasexcepciones.


9 Losobjetosdeltipo SQLException tienendosmtodosmuytilesparaobtenerelcdigodelerror
producidoyelmensajedescriptivodelmismo, getErrorCode() y getMessage() respectivamente.
Elmtodo getMessage() imprimeelmensajedeerrorasociadoalaexcepcinquesehaproducido,
queaunque esteningls,nosayudaasaberquhageneradoelerrorquecauslaexcepcin.El
mtodo getErrorCode() , devuelve un nmero entero que representa el cdigo de error asociado.
Habrqueconsultarenladocumentacinparaaveriguarsusignificado.

26

DesarrollodeAplicacionesWeb

Tema11

El cierre de las conexiones y la gestin de excepciones slo hay que efectuarla con bases
de datos MySQL.

Verdadero

Falso

EnelsiguienteenlacepuedesvermssobrelasexcepcionesenJava.
http://zarza.usal.es/~fgarcia/doc/tuto2/II_8.htm

27

S-ar putea să vă placă și