Este documento describe cómo acceder a bases de datos desde Java usando JDBC. Explica cómo crear una base de datos en MySQL, cargar el driver JDBC, conectarse a la base de datos, ejecutar consultas y actualizaciones, y utilizar metadatos. Además, proporciona ejemplos de código Java para realizar estas operaciones sobre una base de datos de ejemplo con tablas de propietarios y coches.
0 calificaciones0% encontró este documento útil (0 votos)
35 vistas11 páginas
Este documento describe cómo acceder a bases de datos desde Java usando JDBC. Explica cómo crear una base de datos en MySQL, cargar el driver JDBC, conectarse a la base de datos, ejecutar consultas y actualizaciones, y utilizar metadatos. Además, proporciona ejemplos de código Java para realizar estas operaciones sobre una base de datos de ejemplo con tablas de propietarios y coches.
Este documento describe cómo acceder a bases de datos desde Java usando JDBC. Explica cómo crear una base de datos en MySQL, cargar el driver JDBC, conectarse a la base de datos, ejecutar consultas y actualizaciones, y utilizar metadatos. Además, proporciona ejemplos de código Java para realizar estas operaciones sobre una base de datos de ejemplo con tablas de propietarios y coches.
Este documento describe cómo acceder a bases de datos desde Java usando JDBC. Explica cómo crear una base de datos en MySQL, cargar el driver JDBC, conectarse a la base de datos, ejecutar consultas y actualizaciones, y utilizar metadatos. Además, proporciona ejemplos de código Java para realizar estas operaciones sobre una base de datos de ejemplo con tablas de propietarios y coches.
Descargue como PDF, TXT o lea en línea desde Scribd
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).