Consultes a una BD amb JDBC

En la majoria de les aplicacions que ens trobarem, apareixerà una base de dades com a font de información.JDBC ens permetrà accedir a bases de dades (BD ) des de Java. ConJDBC no cal escriure diferents programes per a diferents BD, sinó que un únic programa serveix per accedir a BD de distintanaturaleza. Fins i tot, podem accedir a més d’una BD de distintafuente (Oracle, Access, MySql, etc.) en la mateixa aplicación.Podemos pensar en JDBC com el pont entre una base de dades i nuestroprograma Java. Un exemple senzill pot ser una miniaplicació que muestradinámicamente informació continguda en una base de dades.El applet farà servir JDBC per obtenir aquestes dades.

L’esquema a seguir en un programa que faci servir JDBC és el següent: Esquema general de connexió amb una base de dades

Un programa Java que utilitzi JDBC primer haurà estableceruna connexió amb el SGBD. Per realitzar aquesta conexiónharemos ús d’un driver específic per a cada SGBD que estemosutilizando. Un cop establerta la connexió ja podemosinterrogar la BD amb qualsevol comanda SQL (select, update, create, etc.). El resultat d’una ordre select és un objecte d’laclase ResultSet, que conté les dades que retorna la consulta.Disponemos de mètodes en ResultSet per gestionar lesdades retornats. També podem realitzar cualquieroperación en SQL (creació de taules, gestió deusuarios, etc.). Connexió a través d'l'API i un controlador de JDBC

Per a realitzar aquestes operacions necessitarem comptar amb un SGBD (sistema gestor de bases de dades) a més d’un driverespecífico per poder accedir a aquest SGBD. Anem a utilizardos SGBD: MySQL (disponible per a Windows i Linux, de libredistribución) i Postgres (només per a Linux, tambiénde lliure distribució).

Drivers d’accés

Els drivers per poder accedir a cada SGBD no formen part de ladistribución de Java per la qual cosa haurem obtenir-porseparado. Per què fer ús d’un driver ?. Elprincipal problema que se’ns pot plantejar és que cada SGBD disponede seu propi API (la majoria propietari), de manera que un cambioen l’SGBD implica una modificació del nostre codi. Sicolocamos una capa intermèdia, podem abstreure la connectivitat, de talforma que nosaltres fem servir un objecte per a la connexió, i eldriver s’encarrega de traduir la crida a l’API. El driver el suelendistribuir les pròpies empreses que fabriquen l’SGBD.

Tipus de drivers

Hi ha un estàndard establert que divideix els drivers en cuatrogrupos:

  • Tipus 1: Pont JDBC-ODBC. ODBC (Open Database Connectivity) va ser creat per proporcionar una connexió a bases de dades en Microsoft Windows. ODBC permet accés a bases de dades des de diferents llenguatges de programació, com ara C i Cobol. El pont JDBC-ODBC permet enllaçar Java amb qualsevol base de dades disponible a ODBC. No s’aconsella l’ús d’aquest tipus de driver quan hàgim d’accedir a bases de dades d’alt rendiment, ja que les funcionalitats estan limitades a les que marca ODBC. Cada client ha de tenir instal·lat el driver. J2SE inclou aquest driver en la seva versió Windows i Solaris. Configuració d'un controlador de tipus 1
  • Tipus 2: Part Java, part driver natiu. És una combinació d’implementació Java i API natiu per a l’accés a la base de dades. Aquest tipus de driver és més ràpid que l’anterior, ja que no es realitza el pas per la capa ODBC. Les crides JDBC es tradueixen en trucades específiques de l’API de la base de dades. Cada client ha de tenir instal·lat el driver. Té menys rendiment que els dos següents i no es poden usar a Internet, ja que necessita l’API de forma local. Configuració d'un controlador de tipus 2
  • Tipus 3: Servidor intermediari d’accés a base de dades.Aquest tipus de driverproporciona una abstracció de la connexió. El client seconecta als SGBDmediante un component servidor intermedi, que actua com a unapuerta per a múltiples servidors. L’avantatge d’aquest tipus dedriver és el nivell d’abstracció. El servidorde aplicacions WebLogic incorpora aquest tipus de driver. Configuració d'un controlador de tipus 3
  • Tipus 4: Drivers Java. Aquest és el més directe. La crida JDBC es traducedirectamente en una trucada de xarxa a la base de dades, sinintermediarios. Proporcionanmejor rendiment. La majoria de SGBD proporcionen drivers deeste tipus. Configuració d'un controlador de tipus 4

Instal·lació de drivers

La distribució de JDBC incorpora els drivers per al pont JDBC-ODBC que ens permet accedir a qualsevol BD que es gestioni amb ODBC. Per MySQL, haurem descarregar i instal·lar el SGBD i el driver, que pot ser obtingut en la direcció http://dev.mysql.com/doc/mysql/en/Java_Connector.html.El driver per Postgres s’obté en http://jdbc.postgresql.org

Per instal·lar el controlador l’únic que haurem de fer esincluir el fitxer JAR que el conté en el CLASSPATH. Per exemple, per a MySQL:

export CLASSPATH=$CLASSPATH: /directorio-donde-este/mysql-connector-java-3.0.15-ga-bin.jar

Amb el controlador instal·lat, podrem carregar des nuestraaplicación simplement carregant dinàmicament la clasecorrespondiente a el controlador:

Class.forName("com.mysql.jdbc.Driver");

El controlador JDBC-ODBC es carrega com es mostra a continuació:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

I de forma similar per postgres:

Class.forName("org.postgresql.Driver");

la càrrega de l’driver s’hauria de fer sempre abans deconectar amb la BD.

Com hem vist anteriorment, poden existir diferents tipus dedrivers per a la mateixa base de dades. Per exemple, a una BD en MySQLpodemos accedir mitjançant ODBC o mitjançant el seu propi driver.Podríamos pensar que la solució més sencillasería utilitzar ODBC per a tots les connexions a SGBD. Tanmateix, depenent de la complexitat de l’aplicació adesarrollar això ens podria donar problemes. Determinats SGBDpermiten realitzar operacions (transaccions, millora de rendiment, escabilidad, etc.) que es veuen minvades a l’realitzar la seva connexió a través de el driver ODBC. Per això és preferible fer ús dedriver específics per al SGBD en qüestió.

L’exemple més clar de problemes en l’ús de drivers és ambels Applets. Quan utilitzem accés a bases de dades medianteJDBC des d’un Applet, haurem de tenir en compte que el Appletse executa a la màquina de el client, de manera que si la BDestá allotjada al nostre servidor haurà de estableceruna connexió remota. Aquí trobem el problema de quesi el Applet és visible des d’Internet, és molt possible que elpuerto en què escolta el servidor de bases de dades pot estarcortado per algun tallafocs, per la qual cosa l’accés desdeel exterior no seria possible.

l’ús de el pont JDBC-ODBC tampoc és recomanable en Applets, ja que requereix que cada client tingui configurada la font de datosODBC adequada al sistema. Això podem controlar-lo en el casode una intranet, però en el cas d’Internet serà millor utilizarotros mètodes per a la connexió.

Quant a les excepcions, hem de capturar l’excepció SQLExceptionen gairebé totes les operacions en què es vegi involucradoalgún objecte JDBC.

Connexió a la BD

Un cop carregat el driver apropiat per al nostre SGBD deberemosestablecer la connexió amb la BD. Per a això utilitzarem elsiguiente mètode:

Connection con = DriverManager.getConnection(url);Connection con = DriverManager.getConnection(url, login, password);

La connexió a la BD està encapsulada en un objecte Connection.Para la seva creació hem de proporcionar la URL de la BDy, si la BD està protegida amb contrasenya, el loginy password per accedir-hi. El format de la urlvariará segons el driver que utilitzem. No obstant això, totes les URL tindran la següent forma general: jdbc: < subprotocolo >: < nom >, amb subprotocolo indicant el tipus de SGBD i amb nombreindicando el nom de la BD i aportant informació adicionalpara la connexió.

Per a connectar a una font ODBC de nom bd, per exemple, utilitzarem la següent URL:

Connection con = DriverManager.getConnection("jdbc:odbc:bd");

En el cas de MySQL, si volem connectar-nos a una BD de nom bdalojada a la màquina local (localhost) i amb usuari miguely contrasenya m ++ 24, ho farem de la següent manera:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost/bd", "miguel", "m++24");

En el cas de postgres (notar que hem indicat un port connexióper, el 5432):

Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/bd", "miguel", "m++24");

Podem depurar la connexió i determinar quins llamadasestá realitzant JDBC. Per a això farem ús d’un parell demétodos que incorpora DriverManager. Al siguienteejemplo s’indica que les operacions que realitzi JDBC semostrarán per la sortida estàndard:

DriverManager.setLogWriter(new PrintWriter(System.out, true));

Un cop realitzada aquesta crida també podem mostrarmensajes usant:

DriverManager.println("Esto es un mensaje");

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *