JDBC Mysql Guide

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

Prctica 2

ACCESO A BASES DE DATOS CON JDBC



Tabla de Contenidos
1. Cr eac i n de una base de dat os en MySQL ................................................. 1
1.1. Iniciar y utilizar el servidor MySQL.................................................................................................................... 1
1.2. Creacin de una Base de Datos y sus tablas por medio de un fichero script ................................................... 2
2. Oper ac i ones sobr e l a BD desde J ava c on J DBC........................................ 3
2.1. Introduccin a JDBC.......................................................................................................................................... 3
2.2. Paquete java.sql ................................................................................................................................................ 3
2.3. Pasos para crear una aplicacin JDBC............................................................................................................. 5
2.4. Cargar el driver JDBC........................................................................................................................................ 5
2.5. Conectarse a una Base de Datos...................................................................................................................... 6
2.6. Consultar la Base de Datos............................................................................................................................... 7
2.7. Consultas de Actualizacin................................................................................................................................ 8
2.8. Sentencias de tipo PreparedStatement............................................................................................................. 8
2.9. Utilizacin de Metadata..................................................................................................................................... 9
2.9.1. Informacin de una Base de Datos...........................................................................................................9
2.9.2. Informacin de un ResultSet .....................................................................................................................9
2.10. Clase que prueba el acceso a datos............................................................................................................. 10
3. Ej er c i c i os pr opuest os ............................................................................... 11

1. Cr eac i n de una base de dat os en MySQL
MySQL es un servidor de bases de datos multihilo y multiusuario, robusto y muy rpido.
Permite la creacin de bases de datos relacionales que pueden ser consultadas a travs de
SQL (Structure Query Language) estndar. Para ampliar informacin e instalarlo
1
, se puede
consultar la direccin http://www.mysql.com.
1.1. Iniciar y utilizar el servidor MySQL
Instalacin

Con el objetivo de simplificar esta labor, descargaremos la versin que incluye el instalador
2
.
Durante la instalacin, seleccione la instalacin Custom para incluir toda la documentacin y
ayuda; as mismo seleccione como ruta de instalacin: C:\mysql


1
http://dev.mysql.com/downloads/mysql/
2
http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.27-
win32.zip/from/http://mysql.rediris.es/
1 de 11


Una vez terminada la instalacin, seleccione la casilla para configurar el servidor MYSQL t de
clic en finalizar.

Seleccionaremos la configuracin detallada y pondremos los siguientes valores:
- Developer Machine
- Multifunctional Database
- Disco por defecto (C:)
- Decision Support (DSS)/OLAP
- Enable TCP/IP Networking (Port Number 3306)
- Enable Strict Mode
- Standard Character Set
- Install AS Windows Service (MySQL)
o Launch the MySQL Server automaticaly
- Include Bin Directory in Windows PATH
- Modify Security Settings
o New root password: admin

Iniciarlo
Desde el Panel de Control Herramientas Administrativas Servicios MySQL; es posible
Iniciar, Detener y reiniciar el servidor de MySQL.
Conectarse

C: \ > mysql u r oot - p

Desconectarse

mysql > QUI T

1.2. Creacin de una Base de Datos y sus tablas por medio de un fichero script
En MySQL se puede crear un fichero script que contenga todos los comandos que
necesitamos ejecutar. Este fichero slo debe ser un fichero texto que contenga las rdenes
terminadas en punto y coma.
A continuacin ponemos un ejemplo de un fichero BDCoches.txt que permite la creacin de
una bases de datos llamada DatosCoches y dos tablas relacionadas Propietarios y Coches,
2 de 11
donde Propietarios es la tabla principal de la relacin con DNI como clave principal y Coches
es la tabla relacionada con Matrcula como clave principal:
CREATE DATABASE Dat osCoches;
USE Dat osCoches;
CREATE TABLE PROPI ETARI OS ( DNI VARCHAR( 10) ,
Nombr e VARCHAR( 40) ,
Edad I NTEGER,
UNI QUE KEY( DNI ) ) ;
CREATE TABLE COCHES ( Mat r i cul a VARCHAR( 10) ,
Mar ca VARCHAR( 20) ,
Pr eci o I NTEGER,
DNI VARCHAR ( 10) ,
UNI QUE KEY( Mat r i cul a) ,
FOREI GN KEY ( DNI ) Ref er ences Pr opi et ar i os( DNI ) ) ;
I NSERT I NTO Pr opi et ar i os val ues( ' 1A' , ' Pepe' , 30) ;
I NSERT I NTO Pr opi et ar i os val ues( ' 1B' , ' Ana' , 40) ;
I NSERT I NTO Pr opi et ar i os val ues( ' 1C' , ' Mar i a' , 50) ;
I NSERT I NTO Coches val ues( ' MA- 1111' , ' Opel ' , 1000, ' 1A' ) ;
I NSERT I NTO Coches val ues( ' MA- 2222' , ' Renaul t ' , 2000, ' 1A' ) ;
I NSERT I NTO Coches val ues( ' BA- 3333' , ' Seat ' , 3000, ' 1B' ) ;
Descr i be Pr opi et ar i os;
Descr i be Coches;
Sel ect * f r omPr opi et ar i os;
Sel ect * f r omCoches;
Sel ect * f r omPr opi et ar i os, Coches
wher e Pr opi et ar i os. DNI =Coches. DNI ;

El comando que se utiliza para poder ejecutar todas las rdenes que se encuentran en este
fichero desde MySQL es:
mysql > SOURCE c: \ BDCoches. t xt
2. Oper ac i ones sobr e l a BD desde J ava c on J DBC
2.1. Introduccin a JDBC
JDBC es un API de Java para ejecutar sentencias SQL. Est formado por un conjunto de
clases e interfaces programadas con el propio Java. Permite interactuar con bases de datos,
de forma transparente al tipo de la misma. Es decir, es una forma nica de programar el
acceso a bases de datos desde Java, independiente del tipo de la base de datos. JDBC realiza
llamadas directas a SQL. Para ms informacin sobre JDBC se puede consultar la direccin
http://java.sun.com/javase/technologies/database/index.jsp
Existen cuatro categoras de drivers que soportan la conectividad JDBC
3
, por ejemplo: puente
JDBC-ODBC, drivers de red, drivers nativos . En la prctica utilizaremos un driver especfico
que permite la comunicacin directa de JDBC con MySQL. Su nombre es MySQL
Connector/J 5.0 y es un driver nativo que convierte llamadas JDBC al protocolo de red
utilizado por la base de datos MySQL. Se puede encontrar ms informacin en:
http://www.mysql.com/products/connector/j/
Este driver es necesario tenerlo instalado en el cliente y cambiar la variable CLASSPATH
para que contenga la ruta del fichero .jar o de las carpetas org y com del driver. Para utilizarlo
desde un entorno como el Eclipse, es necesario cambiar las propiedades del proyecto y aadir
el .jar del driver como un jar externo.
2.2. Paquete java.sql
Las clases que conforman el API JDBC
4
se encuentran agrupadas en el paquete java.sql.
Este paquete contiene clases para cargar los drivers, realizar las conexiones a las bases de

3
http://java.sun.com/products/jdbc/driverdesc.html
4
http://java.sun.com/j2se/1.3/docs/guide/jdbc/index.html
3 de 11
datos, consultar los datos y manejar un conjunto de registros. Tambin posee las clases para
el manejo de excepciones que se produzcan en el acceso a bases de datos. A continuacin
mostramos un esquema en el cual se encuentran las interfaces y clases fundamentales del
paquete java.sql.

Clases del Paquete java.sql
DriverManager
DriverInfo
DriverPropertyInfo
Types
Date
Time
SQLWarning DataTruncation
SQLException
Connection
DatabaseMetadata
Driver
ResultSet
ResultSetMetadata
PreparedStatement CallableStatement
Statement
Object

La interface Driver es la interface que todos los drivers deben implementar. Cada driver que
quiera ser utilizado para conectarse a una base de datos desde Java debe suministrar una
clase que implemente la interface Driver. Cuando esta clase es cargada en la aplicacin de
Java, esta debe crear una instancia de s misma y registrarse en el DriverManager. Para
cargar y registrar un driver desde el cdigo se hace con:
Cl ass. f or Name( " URL del Dr i ver " )
La clase DriverManager proporciona el servicio bsico para manejar un conjunto de drivers
JDBC. Como parte de su inicializacin, esta clase intenta cargar las clases driver
referenciadas en la propiedad del sistema "jdbc.drivers". El mtodo ms importante de esta
clase es getConnection, a travs de cual la clase DriverManager intentar localizar un driver
apropiado entre los que estn cargados en el proceso de inicializacin y aquellos cargados
explcitamente en el cdigo. A continuacin mostramos la sintaxis del mtodo fundamental de
esta clase:
Dr i ver Manager . get Connect i on( St r i ng URL, St r i ng usuar i o, St r i ng passwor d)
Este mtodo intenta establecer la coneccin a la URL dada y devuelve un objeto Connection
como resultado.

La interface Connection representa una conexin o sesin con una base de datos especfica.
Las sentencias SQL son ejecutadas y retornan sus resultados dentro del contexto de una
conexin. Una conexin a una base de datos permite acceder a la informacin contenida en
las tablas, soporta la gramtica SQL, los procedimientos almacenados, etc.
La clase Types define las constantes que se utilizarn para identificar tipos genricos SQL,
estas constantes son llamadas tipos JDBC. Esta clase no puede ser instanciada. A
4 de 11
continuacin describimos algunas de las constantes que representan los tipos ms usados y
su tipo equivalente en Java.

Constantes de la clase Types Tipo de dato Java
Types.BIT boolean
Types.TINYINT byte
Types.SMALLINT short
Types.INTEGER int
Types.BIGINT long
Types.FLOAT double
Types.REAL float
Types.DOUBLE double
Types.NUMERIC java.math.BigDecimal
Types.DECIMAL java.math.BigDecimal
Types.CHAR java.lang.String
Types.VARCHAR java.lang.String
Types.LONGVARCHAR java.lang.String
Types.DATE java.sql.Date
Types.TIME java.sql.Time
Types.BINARY byte []
Types.VARBINARY byte []

Las clases Date y Time se utilizan para representar los valores de fecha y hora desde el
cdigo de Java permitiendo a JDBC identificarlos como SQL DATE y SQL TIME. La forma de
representacin es especificando el valor de la fecha o la hora en milisegundos pasados desde
el 1 de Enero de 1970.
Las interfaces DatabaseMetaData y ResulSetMetaData permitirn obtener informacin
referente al diseo y estructura de la base de datos y de los ResultSet que se obtengan
respectivamente. La clase SQLException representa a las excepciones relacionadas con el
acceso a base de datos y proporciona informacin acerca del error que ha ocurrido.
2.3. Pasos para crear una aplicacin JDBC
a) Cargar el driver J DBC.
b) Conectarse a la Base de Datos utilizando la clase Connection.
c) Crear sentencias SQL, utilizando objetos de tipo Statement.
d) Ejecutar las sentencias SQL a travs de los objetos de tipo Statement.
e) En caso que sea necesario, procesar el conjunto de registros resultante utilizando la
clase ResultSet.
2.4. Cargar el driver JDBC
Para conectarse a una base de datos a travs de JDBC desde una aplicacin Java, lo primero
que se necesita es cargar el driver que se encargar de convertir la informacin que se enva a
travs de la aplicacin a un formato que lo entienda la base de datos. Esta parte del cdigo
sera la nica que dependera del tipo de driver y del tipo de base de datos.
La sintaxis para cargar el driver es:
Cl ass. f or Name( " Cl ase del dr i ver " ) . newI nst ace( ) ;
Por ejemplo, si el driver que se emplea es el puente JDBC-ODBC, entonces el cdigo para
cargarlo sera:
Cl ass. f or Name( " sun. j dbc. odbc. J dbcOdbcDr i ver " ) ;
5 de 11
En esta prctica utilizaremos el driver nativo MySQLConector/J para acceder a MySQL.
Entonces el cdigo ser:
Cl ass. f or Name( " com. mysql . j dbc. Dr i ver " ) . newI nst ance( ) ;
El cdigo para cargar el driver podra lanzar una excepcin de tipo ClassNotFoundException
que debe ser capturada.
Recordamos que este driver es necesario tenerlo instalado en el cliente y cambiar la variable
CLASSPATH para que contenga la ruta del fichero .jar o de las carpetas org y com del driver.
Para utilizarlo desde un entorno como el Eclipse, es necesario cambiar las propiedades del
proyecto y aadir el .jar del driver como un jar externo.
2.5. Conectarse a una Base de Datos
Para conectarse a una fuente de datos especfica, una vez cargado el driver, se utiliza una
URL que indicar la base de datos con la sintaxis:
j dbc: subpr ot ocol o: par met r os
El subprotocolo indica una forma de conexin a una base de datos que puede ser soportada
por uno o ms drivers. El contenido y sintaxis de los parmetros depende del subprotocolo. La
sintaxis general de conexin es:
Connect i on con = Dr i ver Manager . get Connect i on( URL, usuar i o, passwor d)
A continuacin se ir desarrollando un ejemplo con las diferentes funcionalidades para
acceder a la base de datos DatosCoches. La conexin a la base de datos y la consulta de la
misma se desarrollar en una clase java llamada AccesoDatos. Las pruebas se realizarn
desde otra clase PruebaAccesoDatos que solo contendr una funcin main desde donde se
llamar a todas las funciones de AccesoDatos. Por ejemplo, para conectarse a travs del
driver de MySQL a la base de datos DatosCoches el cdigo sera:

i mpor t j ava. sql . *;
publ i c cl ass AccesoDat os {
Connect i on con;
St at ement st ;
Resul t Set r s;
publ i c voi d abr i r Conexi on( ) {
t r y {
St r i ng user Name=r oot ;
St r i ng passwor d=admi n;
St r i ng ur l =" j dbc: mysql : / / l ocal host / Dat osCoches";
Cl ass. f or Name( " com. mysql . j dbc. Dr i ver ") . newI nst ance( ) ;
con = Dr i ver Manager . get Connect i on( ur l , user Name, passwor d) ;
Syst em. out . pr i nt l n( " Conexi n a l a BD") ;
}
cat ch ( Except i on e) {
Syst em. out . pr i nt l n( " Er r or en conexi n ") ;
}
}


/ / Par a cer r ar l a conexi n una vez t er mi nadas l as consul t as
publ i c voi d cer r ar Conexi on( ) {
t r y {
con. cl ose( ) ;
Syst em. out . pr i nt l n( " Conexi n cer r ada" ) ;
}
cat ch ( SQLExcept i on e) {
Syst em. out . pr i nt l n( " Er r or al cer r ar conexi n" ) ;
}
}
}
. . .
6 de 11
2.6. Consultar la Base de Datos
Para recuperar informacin de una de base de datos se utiliza la clase Statement , cuyos
objetos se crean a partir de una conexin y tienen el mtodo executeQuery para ejecutar
consultas SQL de tipo SELECT devolviendo como resultado un conjunto de registros en un
objeto de la clase ResultSet.
Supongamos que se tiene una conexin a la base de datos DatosCoches cuyas tablas son
Propietarios y Coches y que queremos obtener los registros de la tabla Coches ordenados
segn el precio de mayor a menor, el cdigo sera:

. . .
publ i c voi d obt ener Dat osTabl a( ) {
t r y {
st =con. cr eat eSt at ement ( ) ;
r s = st . execut eQuer y( " SELECT * FROM Coches ORDER BY pr eci o DESC" ) ;
Syst em. out . pr i nt l n( " Tabl a abi er t a" ) ;
. . .
} cat ch ( SQLExcept i on e) {
Syst em. out . pr i nt l n( " Er r or al Abr i r t abl a " ) ;
}
Una sentencia creada de esta forma devuelve un ResultSet en el que slo puede haber
desplazamiento hacia adelante.
Para luego acceder al conjunto de registros que se encuentran en el ResultSet, es necesario el
mtodo next del objeto ResultSet para movernos por los registros y mtodos especficos para
extraer la informacin de cada tipo de campo con la forma getXXXX. A continuacin
mostramos una tabla con los mtodos de los tipos ms comunes:
Mtodos de ResultSet Tipo SQL
getInt INTEGER
getLong BIG INT
getFloat REAL
getDouble FLOAT
getBignum DECIMAL
getBoolean BIT
getString VARCHAR
getString CHAR
getDate DATE
getTime TIME
getTimesstamp TIME STAMP
getObject cualquier tipo

Para cada mtodo getXXXX, el driver JDBC debe hacer conversiones entre el tipo de la base
de datos y el tipo Java equivalente. El driver no permite conversiones invlidas aunque si
permite que todos los tipos puedan ser ledos desde Java como cadenas con el mtodo
getString.
Por otra parte, cuando se recorre el ResultSet es necesario conocer cuando se llega al final
del mismo y esto se controla con el mtodo next que adems de moverse al siguiente registro,
devuelve falso cuando se ha pasado del ltimo registro. Un ejemplo de cdigo para recorrer un
ResulSet visualizando su contenido por consola es:

. . .
publ i c voi d most r ar Dat osCoches( ) {
t r y {
whi l e ( r s. next ( ) ) {
St r i ng st r Mat = r s. get St r i ng( " Mat r i cul a" ) ;
St r i ng st r Mar ca = r s. get St r i ng( " Mar ca" ) ;
i nt i nt Pr eci o = r s. get I nt ( " Pr eci o" ) ;
7 de 11
Syst em. out . pr i nt l n( st r Mat + " , " + st r Mar ca + " , " +
i nt Pr eci o) ;
}
} cat ch ( Except i on e) {
Syst em. out . pr i nt l n( " Er r or al vi sual i zar dat os" ) ;
}
}
2.7. Consultas de Actualizacin
Para actualizar la base de datos con sentencias SQL de tipo UPDATE, INSERT o DELETE, es
necesario al igual que en el caso de SELECT, tener una Connection y crear una Statement a
partir de la misma. La diferencia es que en vez de llamar al mtodo executeQuery para
ejecutar la consulta, se llama al mtodo executeUpdate que no devuelve un ResultSet como
resultado, sino que devuelve la cantidad de registros afectados. A continuacin se muestran
varios mtodos con ejemplos de este tipo de consultas.

/ / Mt odo par a modi f i car l a t abl a Coches pasando l a mat r cul a del / / coche que
se qui er e modi f i car y el nuevo pr eci o. Las cadenas en l a / / condi ci n es
necesar i o poner l as ent r e comi l l as si mpl es.
publ i c voi d modi f i car ( St r i ng m, i nt p)
{
t r y {
St at ement s2=con. cr eat eSt at ement ( ) ;
s2. execut eUpdat e( " Updat e Coches set Pr eci o=" + p +
" wher e Mat r i cul a l i ke ' " + m+ " %' " ) ;
Syst em. out . pr i nt l n( " El ement o modi f i cado cor r ect ament e" ) ;
}cat ch ( SQLExcept i on e)
{
Syst em. out . pr i nt l n( " Er r or al modi f i car " ) ;
}
}

/ / Mt odo par a bor r ar el coche cuya mat r i cul a se pasa como ar gument o
publ i c voi d bor r ar ( St r i ng m)
{
t r y{
St at ement s2=con. cr eat eSt at ement ( ) ;
s2. execut eUpdat e(
" DELETE FROM Coches wher e Mat r i cul a l i ke ' " +m+" %' " ) ;
Syst em. out . pr i nt l n( " El ement o Bor r ado" ) ;
}cat ch( SQLExcept i on e)
{
Syst em. out . pr i nt l n( " Er r or al Bor r ar " ) ;
}
}

/ / Mt odo que per mi t e i nser t ar un nuevo r egi st r o en l a t abl a Coches,
/ / pasndol e como ar gument o l a mat r cul a, mar ca, pr eci o del coche y
/ / dni del pr opi et ar i o
publ i c voi d i nser t ar ( St r i ng m, St r i ng mar , i nt p, St r i ng d)
{ t r y{
St at ement s1 = con. cr eat eSt at ement ( ) ;
s1. execut eUpdat e(
" I NSERT I NTO Coches ( Mat r i cul a, Mar ca, Pr eci o, DNI ) val ues ( ' "
+ m+ " ' , ' " + mar + " ' , " + p + " , ' " + d + " ' ) " ) ;
Syst em. out . pr i nt l n( " El ement o i nser t ado" ) ;
}
cat ch( SQLExcept i on e)
{
Syst em. out . pr i nt l n( " Er r or al i nser t ar " ) ;
}
}


2.8. Sentencias de tipo PreparedStatement
Cuando se realiza la misma operacin varias veces, es mejor utilizar la clase
PreparedStatement para una ejecucin eficiente. Esta eficiencia est dada porque la consulta
8 de 11
que se ejecute a travs de un objeto de la clase PreparedStatement ser precompilada por el
motor SQL de la fuente de datos a la cul se accede.
Esta clase tambin permite una forma ms cmoda de ejecutar consultas a las cuales hay que
pasar muchos parmetros.
En estas consultas, los signos de interrogacin representan los parmetros. Para sustituir cada
signo de interrogacin se utiliza un mtodo setXXXX(pos, valor) cuyo nombre depende del tipo
del parmetro. El argumento pos indica la posicin del signo de interrogacin que se quiere
sustituir, empieza en 1.
/ / Mt odo par a i nser t ar un r egi st r o en l a t abl a Pr opi et ar i os. Los
/ / ar gument os del mt odo son el DNI , nombr e y edad.
publ i c voi d i nser t ar 2( St r i ng dni , St r i ng n, i nt ed) {
t r y {
Pr epar edSt at ement ps = con. pr epar eSt at ement (
" i nser t i nt o Pr opi et ar i os val ues ( ?, ?, ?) " ) ;
ps. set St r i ng( 1, dni ) ;
ps. set St r i ng( 2, n) ;
ps. set I nt ( 3, ed) ;
/ / En est e caso, el mt odo execut eUpdat e devuel ve l a cant i dad de
/ / el ement os i nser t ados.
i f ( ps. execut eUpdat e( ) ! =1)
t hr ow new Except i on( " Er r or en l a I nser ci n" ) ;
}cat ch ( Except i on e) {
Syst em. out . pr i nt l n( " Er r or al I nser t ar " ) ;
}
}
2.9. Utilizacin de Metadata
Como ya fue comentado anteriormente, existen clases en el paquete java.sql que permiten
acceder a la informacin sobre el diseo y la estructura de la base de datos como un todo o de
un ResultSet obtenido a partir de una consulta concreta. A este tipo de informacin se le llama
metadata y las clases que nos permitirn obtenerlo son DatabaseMetaData y
ResultSetMetaData.
2.9.1. Informacin de una Base de Datos
Cuando se necesita conocer sobre las capacidades, o el vendedor de una base de datos, se
puede preguntar al objeto Connection por su metadata. Existen muchas preguntas que se
pueden hacer, entre ellas tenemos el tipo base de datos, la cantidad mxima de conexiones
que permite la base de datos, etc. El fragmento de cdigo que se encuentra a continuacin,
muestra como obtener esta informacin.
Publ i c voi d bd( ) t hr ows SQLExcept i on{
Dat abaseMet aDat a dbMet = con. get Met aDat a( ) ;
i f ( dbMet ==nul l )
Syst em. out . pr i nt l n( " No hay i nf or maci n de Met aDat a" ) ;
el se {
Syst em. out . pr i nt l n( " Ti po de l a BD: " +
dbMet . get Dat abasePr oduct Name( ) ) ;
Syst em. out . pr i nt l n( " Ver si n : " +
dbMet . get Dat abasePr oduct Ver si on( ) ) ;
Syst em. out . pr i nt l n( " Cant i dad mxi ma de conexi ones act i vas: " +
dbMet . get MaxConnect i ons( ) ) ;
}

2.9.2. Informacin de un ResultSet
Se puede obtener informacin de la estructura de un conjunto de registros resultantes de una
consulta. Esto puede ser muy til para acceder a tablas de una base de datos de las cuales no
se tenga informacin sobre su estructura. Utilizando la clase ResultSetMetaData podremos
determinar la cantidad de columnas o campos que contiene un ResultSet, el tipo y nombre de
cada campo, sin el campo es solo lectura, etc. La funcin siguiente muestra la estructura de
una tabla que le pasemos como argumento.
9 de 11
publ i c voi d est r uct ur aTabl a( St r i ng st r Tbl ) {
t r y {
St at ement st = con. cr eat eSt at ement ( ) ;
Resul t Set r s = st . execut eQuer y( " Sel ect * f r om" + st r Tbl ) ;
/ / Obt i ene el met adat a del Resul t Set
Resul t Set Met aDat a r smet a = r s. get Met aDat a( ) ;
/ / Obt i ene l a cant i dad de col umnas del Resul t Set
i nt col = r smet a. get Col umnCount ( ) ;
f or ( i nt i = 1; i <= col ; i ++) {
Syst em. out . pr i nt l n( " Campo " +
/ / Devuel ve el nombr e del campo i
r smet a. get Col umnLabel ( i ) + " \ t "
/ / Devuel ve el t i po del campo i
+ " Ti po: " + r smet a. get Col umnTypeName( i ) ) ;
}
}
cat ch ( Except i on e) {
Syst em. out . pr i nt l n( " Er r or en Met adat a " ) ;
}
}
Tambin es posible mediante la utilizacin de la informacin del ResultSetMetaData mostrar la
informacin de cualquier tabla sin tener la estructura previamente.
publ i c voi d ver Cual qui er Tabl a( St r i ng st r Tbl ) {
t r y {
St at ement st = con. cr eat eSt at ement ( ) ;
Resul t Set r s = st . execut eQuer y( " Sel ect * f r om " +
st r Tbl ) ;
Resul t Set Met aDat a met a = r s. get Met aDat a( ) ;
i nt col = met a. get Col umnCount ( ) ;
/ / Mi ent r as haya r egi st r os
whi l e ( r s. next ( ) ) {
f or ( i nt i = 1; i <= col ; i ++) {
/ / Most r ar el dat o del campo i
Syst em. out . pr i nt ( r s. get St r i ng( i )
+ " \ t " ) ;
}
Syst em. out . pr i nt l n( " " ) ;
}
}cat ch ( Except i on e) {
Syst em. out . pr i nt l n( " Cual qui er " + e. t oSt r i ng( ) ) ;
}
}
2.10. Clase que prueba el acceso a datos
Para probar todas las funciones que se han hecho en la clase AccesoDatos se puede
desarrollar la clase PruebaAccesoDatos con una funcin main:
package pj dbc;

i mpor t j ava. sql . SQLExcept i on;

publ i c cl ass Pr uebaAccesoDat os {

publ i c st at i c voi d mai n ( St r i ng[ ] ar gs) t hr ows SQLExcept i on{
AccesoDat os AD = new AccesoDat os( ) ;
AD. abr i r Conexi on( ) ;
AD. obt ener Dat osTabl a( ) ;
AD. most r ar Dat osCoches( ) ;
AD. modi f i car ( " BA- 3333" , 5000) ;
AD. bor r ar ( " MA" ) ;
AD. i nser t ar ( " AA- 0005" , " For d" , 4500, " 1A" ) ;
AD. i nser t ar 2( " X25" , " J ose" , 54) ;
AD. bd( ) ;
AD. est r uct ur aTabl a( " Pr opi et ar i os" ) ;
AD. ver Cual qui er Tabl a( " Coches" ) ;
AD. cer r ar Conexi on( ) ;


}


}
10 de 11
3. Ej er c i c i os pr opuest os
En el ejemplo que se ha ido desarrollando no se han verificado las restricciones que se exigen
cuando se accede a una base de datos con tablas relacionadas entre si. A continuacin
proponemos dos ejercicios que complementaran esta prctica:
Funcin que dado el dni del propietario, liste sus datos y los coches que posee.
Modificar la funcin de insertar coches para que verifique que el dni del propietario ya
existe en la tabla propietarios, si no existe, que no permita la insercin del nuevo coche.
Funcin que permita borrar de la BD a un propietario (borrando tambin los coches de
este propietario).

11 de 11

También podría gustarte