Está en la página 1de 34

Instituto de Computacin Facultad de Ingeniera Universidad de la Repblica Oriental del Uruguay

Tcnicas Avanzadas para Gestin de Sistemas de Informacin


Carrera de Ingeniera en Computacin

Edicin 2003

Tarea obligatoria sobre: Tecnologas para Sistemas de Informacin

Ttulo Estudiantes

Estado de los accesos a Bases de Datos desde Java utilizando JDBC


Ana Ins Mora Marquicio Pagola Leandro Portela Marcos Marsicano

Docente encargado:
Dr. Ing. Hermann Steffen

Estado de los accesos a Bases de Datos desde Java utilizando JDBC

Tcnicas Avanzadas para la Gestin de Sistemas de Informacin - 2003

GRUPO 7 Marcos Marsicano CI: 3.659.140-9 Ana Ins Mora CI: 3.589.162-0 Marquicio Pagola CI: 3.213.360-1 Leandro Portela CI: 4.153.495-1

INDICE
Introduccin.................................................................................................................. 4 Qu es la API de JDBC ?........................................................................................ 4 Por qu crear la API JDBC ? .................................................................................. 6 Cmo deba ser JDBC ? ......................................................................................... 6 Cmo funciona JDBC ?.......................................................................................... 7 Una base para otras APIs .......................................................................................... 8 Requisitos..................................................................................................................... 8 Qu se debe instalar ?............................................................................................. 8 1. Instalar Java y el JDBC en la mquina............................................................... 8 2. Instalar un driver en la mquina......................................................................... 9 3. Instalar el Controlador de Base de Datos si es necesario. ................................... 9 Compatibilidad con SQL........................................................................................... 9 Arquitectura................................................................................................................ 10 El Modelo JDBC de Java ........................................................................................ 10 Tipos .......................................................................................................................... 11 Tipo 1: Puente JDBC-ODBC. ................................................................................. 11 Qu es el Puente JDBC-ODBC ? ...................................................................... 12 El puente JDBC- ODBC...................................................................................... 13 Obteniendo un Driver JDBC ............................................................................... 13 Implementacin del puente.................................................................................. 13 Instalacin........................................................................................................... 13 Usando el puente................................................................................................. 13 Usando el puente desde un Applet....................................................................... 13 La mayora de los Browsers no soportan el Puente .............................................. 13 Drivers ODBC conocidos para trabajar con el puente .......................................... 14 Tipo 2: Driver parcial de Java ................................................................................. 15 Tipo 3: Drivers Java puros para middleware de bases de datos................................ 16 Tipo 4: Driver Java puro directo a la base de datos.................................................. 17 Versiones.................................................................................................................... 17 Qu incluye la API de JDBC 2.0 ............................................................................. 18 Qu es pooling de conexiones ?............................................................................ 19 La API del ncleo de JDBC 2.0........................................................................... 19 El paquete opcional de la API JDBC 2.0 ............................................................. 19 Beneficios del pooling de conexiones...................................................................... 19 Pautas para escribir un driver JDBC............................................................................ 20 Requerimientos para todos los drivers ..................................................................... 20 Implementar mtodos en las interfaces ................................................................ 20 Implementar un inicializador esttico .................................................................. 21 Soportar extensiones al SQL-92 Entry Level ....................................................... 21 Soportar funciones escalares ............................................................................... 22 Proveer bloqueo para actualizaciones y eliminaciones posicionadas .................... 24 Soportar Multithreading ...................................................................................... 24 Lanzar excepciones en presencia de parmetros de entrada truncados ................. 24 Usar comportamientos por defecto para los tipos de datos SQL3......................... 24 Variantes permitidas ............................................................................................... 24 Cuando una funcionalidad no es soportada.......................................................... 25

Variacin en propiedades fundamentales............................................................. 25 Agregando funcionalidad .................................................................................... 25 Responsabilidades de seguridad de los drivers......................................................... 25 Verificar conexiones TCP compartidas................................................................ 25 Verificar todos los accesos locales a archivos...................................................... 26 Asumir lo peor .................................................................................................... 26 Lanzar una SQLException en caso de excepciones.............................................. 26 Implementaciones sugeridas.................................................................................... 26 Bsqueda anticipada de filas ............................................................................... 26 Ofrecer mtodos "finalize para Applets ............................................................. 27 Evitar estados dependientes de la implementacin............................................... 27 Ventajas / Desventajas ................................................................................................ 27 Similitudes y diferencias con ODBC....................................................................... 27 API JDBC Vs ODBC.............................................................................................. 28 Comparacin del uso de JDBC en un modelo de 2 capas y en uno de 3 capas: ........ 29 Alternativas a JDBC ............................................................................................... 30 Limitaciones de JDBC ............................................................................................ 30 Ventajas de la tecnologa JDBC .............................................................................. 30 Influencia de datos de empresa existentes............................................................ 30 Desarrollo simplificado de la empresa................................................................. 31 Cero configuracin para redes de computadoras.................................................. 31 Cero Instalacin .................................................................................................. 31 Impulso en la industria ........................................................................................ 31 Conexin a la base de datos identificada por una URL ........................................ 31 Conclusiones .............................................................................................................. 32 Referencias ................................................................................................................. 33

Introduccin
Durante los ltimos aos, la industria de la computacin ha visto una explosin en el crecimiento de Internet y la World Wide Web (WWW). En un corto perodo de tiempo, la WWW ha evolucionado desde la entrega de simples pginas web estticas hasta la disponibilidad de las optimizadas pginas web dinmicas, creadas a travs de varias extensiones de los servidores Web existentes. Durante el mismo perodo de tiempo, Java ha llegado a ser el lenguaje elegido para desarrollar y desplegar aplicaciones Internet / intranet. Todos los SO lderes y plataformas de browser estn construyendo Mquinas Virtuales de Java en sus sistemas. Adicionalmente, los mayores vendedores de herramientas de desarrollo y proveedores de aplicaciones estn proveyendo de soporte para Java. Los Java applets y servelet aparecen por toda la Web, brindando rica funcionalidad a lo que antes era slo un medio esttico. El prximo paso en esta evolucin, era el uso de Java para crear applets que permitieran aplicaciones de misin crtica de negocio y transacciones procesadas sobre la Internet / intranet. Este nivel requera nuevos mtodos de alta performance y robustos para acceder a los repositorios de datos corporativos. Uno de estos mtodos es JDBC el estndar de Java para Conectividad de Bases de Datos.

Qu es la API de JDBC ?
JDBC (Java Database Connectivity) es el equivalente en Java de ODBC. El estndar JDBC fue creado con la ayuda de las bases de datos lderes y proveedores de herramientas de bases de datos tales como Sybase, Oracle, Informix, Symantec, y Intersolv. El estndar JDBC esta basado en X/Open SQL Call Level Interface, la misma base que ODBC. JDBC existe desde 1996, y fue incluido desde la versin 1.1 del JDK como el paquete java.sql, aunque tambin se hizo disponible para usarse con el JDK 1.02. JDBC es una API de Java para acceder, virtualmente a cualquier tipo de datos tabulares. La API JDBC consiste en un conjunto de clases e interfaces escritas en el lenguaje de programacin Java que provee una API estndar para desarrolladores de herramientas/bases de datos y hace posible la escritura de importantes aplicaciones de base de datos industriales usando una API cien por ciento Java. Este incluye la API JDBC 1.0, que provee las funcionalidades bsicas para el acceso a datos, haciendo fcil el envi de sentencias SQL a sistemas de bases de datos relacionales. La API JDBC 2.0 complementa a la API bsica con elementos ms avanzados haciendo posible interactuar con otros tipos de fuentes de datos, tales como archivos conteniendo datos tabulares; tambin provee una forma estndar para acceder a los ltimos elementos objeto-relacional que son soportados por los manejadores de bases de datos relacionales de hoy en da. Adems, la nueva API incluye cosas tales como result set navegable y actualizable, actualizando mltiples tems de datos con un simple comando, y performance mejorada. Esta extiende la tecnologa JDBC ms all del cliente, hacia el servidor con connection pooling y transacciones distribuidas. Connection pooling permite a los programadores reusar conexiones de bases de datos, no siendo necesario hacer una nueva conexin a la base de datos para cada comando nuevo de JDBC.

El valor de la API JDBC es que una aplicacin puede acceder virtualmente a cualquier fuente de datos y correr en cualquier plataforma con la Mquina Virtual de Java. En otras palabras, en la API JDBC, es innecesario escribir un programa para acceder a una base de datos Sybase, otro programa para acceder a una base de datos Oracle, otro programa para acceder a una base de datos IBM DB2, etc. Uno puede escribir un programa simplemente usando la API JDBC, y el programa ser capaz de enviar SQL u otras sentencias a la fuente de datos. Y, con una aplicacin escrita en el lenguaje de programacin Java, no es necesario preocuparse de escribir diferentes aplicaciones para correr en diferentes plataformas. La combinacin de la plataforma Java y la API JDBC permite a un programador escribir una vez y correr en cualquier lado. La API de JDBC 2.0 extiende lo que puede hacerse con la plataforma Java. Por ejemplo, la API de JDBC hace posible publicar una pgina web conteniendo un applet que usa informacin obtenida desde una fuente de datos remota. O una empresa puede usar la API de JDBC para conectar a todos sus empleados (an si ellos estn usando una conglomeracin de mquinas Windows, Macintosh y UNIX) a una o ms bases de datos internas va una intranet. Con ms y ms programadores usando el lenguaje de programacin Java, la necesidad de un acceso a datos fcil y universal desde Java contina creciendo. Manejadores de Sistemas de Informacin como la combinacin de la plataforma Java y la tecnologa JDBC hacen la diseminacin de la informacin fcil y econmica. Las empresas pueden continuar usando sus bases de datos y acceder a informacin fcilmente an si sta est almacenada en diferentes DBMS u otras fuentes de datos. El tiempo de desarrollo de nuevas aplicaciones es corto. La instalacin y el control de versiones es realmente simplificado. Un programador puede escribir una aplicacin o actualizar una, ponerla en el servidor, y todo el mundo tiene acceso a la ltima versin. Y para los negocios de servicios de venta de informacin, la combinacin de las tecnologas de Java y JDBC ofrece una mejor forma de divulgar informacin actualizada a clientes externos. Al igual que ODBC, JDBC est fuertemente influenciada por las APIs programables de bases de datos ya existentes, tales como X/OPEN SQL Call Level Interface. Sun quiso reusar la abstraccin clave de estas APIs, que sera fcilmente aceptada por los vendedores de bases de datos y capitalizada en el conocimiento existente de ODBC y desarrolladores de clientes SQL. Adems, Sun reconoci que derivando su API de otras ya existentes poda proveer rpidos desarrollos de soluciones para motores de bases de datos que soportaran los viejos protocolos. Especialmente, se trabaj en paralelo con Intersolv para crear un puente con ODBC que transformara llamadas JDBC en llamadas ODBC, dando as acceso desde aplicaciones Java a cualquier DBMS que soportara ODBC. JDBC intenta mantenerse lo ms simple posible mientras provee a los desarrolladores con la mxima flexibilidad posible. Las tareas simples y comunes usan interfaces simples, mientras que las tareas menos comunes o bizarras son provistas con interfaces extras. Por ejemplo, tres interfaces manejan una vasta mayora de accesos a la base de datos. JDBC sin embargo provee muchas otras interfaces para manejar tareas ms complejas e inusuales.

Por qu crear la API JDBC ?


Java era un lenguaje que prometa independencia de plataformas, lo cual lo haca un ambiente muy atractivo para crear todo tipo de aplicaciones, y el acceso a base de datos era ya ms una necesidad que un lujo.
N

N N

Por ejemplo, aqu se tienen tres casos en donde esta solucin es una necesidad: Cuando existe la necesidad de diseminar informacin internamente en una compaa grande cuando los departamentos han sido estandarizados en diferentes plataformas. Si una corporacin ha pasado por una fusin y se encuentra con diferentes sistemas operativos y bases de datos. Para e-commerce, aplicaciones que corren sobre Internet, cuando la compaa no tiene control sobre el software que sus clientes usan. Los clientes solo necesitan la tecnologa Java apropiada, que puede ser descargada en el momento a sus computadoras.

El lenguaje de programacin Java, siendo robusto, seguro, fcil de usar, fcil de entender, y descargable de la red, es un excelente lenguaje para aplicaciones de bases de datos. Lo que se necesita es una manera para que las aplicaciones Java hablen con una variedad de diferentes fuentes de datos. JDBC es el mecanismo para hacer esto.

Cmo deba ser JDBC ?


Trabajando con lderes en el campo de las bases de datos, se desarrollo una API simple para el acceso a base de datos, JDBC. Durante este proceso, se mantuvieron tres metas en mente: N JDBC deba ser una API a nivel de SQL. N JDBC deba capitalizar la experiencia de APIs de base de datos ya existentes. N JDBC deba ser simple. La gente en Sun se pregunt como atraer a los programadores y a las empresas a invertir su dinero y su tiempo en JDBC. Entonces decidieron que deba tener ciertas ventajas sobre sus cercanos competidores. N El programador deba sentirse como si usara Java, es decir, le deba proveer esa estructura de objetos y un mapeo suave al paradigma de "tipos de datos" que ofrecen los DBMS. N El programador deba sentirse en contacto directo con el DBMS, no con un socket o un proceso en cualquier maquina. N La comunicacin con el manejador de bases de datos deba ser fcil de programar. Esto es, que las empresas que quisieran hacer controladores JDBC para comunicarse con sus productos lo pudieran hacer en forma sencilla. N Deba ser flexible para aceptar configuraciones diferentes de conectividad, o sea, que la misma aplicacin del desarrollador pudiese acceder a varios DBMS a la vez, tal vez hasta en varios hilos simultneos.

Cmo funciona JDBC ?


La arquitectura de JDBC est basada en un conjunto de interfaces y clases de Java que permiten conectarse con bases de datos, crear y ejecutar sentencias de SQL, recuperar y modificar datos de una base de datos. Todo el trabajo con JDBC comienza con la clase DriverManager, que es la que establece las conexiones con las fuentes de datos, mediante los drivers o controladores JDBC. Los drivers de bases de datos se definen mediante clases que implementan la interfaz Driver. Cada driver sabe cmo convertir peticiones SQL para una base de datos concreta. Si no disponemos del driver adecuado, no podemos conectarlos a una base de datos, dependiendo de las implementaciones concretas de cada fabricante. Por lo tanto, lo primero que debe llevar a cabo un programa es cargar el driver adecuado para que el cdigo Java pueda comunicarse con la base de datos. Podemos describir el funcionamiento de un programa Java con JDBC en los siguientes pasos: N Importar las clases necesarias N Cargar el Driver JDBC N Crear un objeto Connection N Identificar el origen de datos N Crear un objeto Statement N Ejecutar una consulta con el objeto Statement N Liberar el objeto ResultSet N Liberar el objeto Statement N Liberar el objeto Connection El siguiente fragmento de cdigo es un simple ejemplo de la carga de un driver JDBC:
Connection con = DriverManager.getConnection( "jdbc:myDriver:wombat", "myLogin", "myPassword"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }

FROM

Segn Sun, estn disponibles drivers especializados de JDBC para la mayora de las base de datos incluyendo bases de datos relacionales desde Oracle Corp., IBM, Microsoft Corp., Informix Corp. y Sybase Inc. as como para cualquier fuente de datos que use el sistema Microsoft's Open Database Connectivity.

Una base para otras APIs


La API de JDBC es usada para invocar comandos SQL directamente. Trabaja muy bien y es ms fcil de usar que otras APIs de conectividad de bases de datos, pero fue diseada para ser una base sobre la cual construir interfaces y herramientas alternativas. Una interfaz alternativa tratar de ser "amigable" usando una API ms entendible o ms conveniente que es transmitida en forma transparente dentro de la API de JDBC. Dado que la API de JDBC es completa y lo suficientemente poderosa para ser usada como base, tiene varios tipos de APIs alternativas desarrolladas sobre ella, incluidas las siguientes: 1. SQL embebido para Java. Un consorcio que incluye Oracle, IBM, Sun, y otros ha definido la especificacin SQLJ para proveer esto. JDBC requiere que las sentencias SQL bsicamente sean pasadas como strings no interpretados a mtodos Java. Un preprocesador embebido de SQL provee chequeo de tipos en tiempo de compilacin y permite al programador mezclar e intercalar sentencias SQL con sentencias Java. Por ejemplo, una variable Java puede ser usada en una sentencia SQL para recibir o proveer valores SQL. El preprocesador SQLJ traduce esta mezcla de Java y SQL en el lenguaje Java con llamadas a JDBC. 2. Un mapeo directo entre tablas de base de datos relacional con clases de Java. Sun Microsystems cuenta con Java Blend_ como proveedor de esto, y tiene otros productos similares. En este mapeo objeto/relacional, una tabla se convierte en una clase, cada fila de la tabla se convierte en una instancia de la clase, y cada valor de columna corresponde a un atributo de esa instancia. Los programadores pueden operar directamente con objetos Java, las llamadas SQL requeridas para buscar y almacenar los datos son generadas automticamente en segundos. Java Blend tambin permite un mapeo ms sofisticado, por ejemplo, cuando filas o mltiples tablas son combinadas en una clase Java. Como el inters en la tecnologa JDBC ha crecido, otras herramientas basadas en JDBC se han desarrollado para hacer la construccin de programas ms fcil. Por ejemplo una aplicacin debe presentar un men de tareas de base de datos del cual elegir. Luego que una tarea es elegida, la aplicacin presenta blancos en donde llenar la informacin necesaria para ejecutar la tarea seleccionada. Con la entrada requerida ya ingresada, la aplicacin automticamente invoca los comandos de JDBC necesarios. Con la ayuda de esta aplicacin, los usuarios pueden ejecutar tareas de bases de datos an cuando tengan poco o ningn conocimiento de la sintaxis de SQL.

Requisitos
Qu se debe instalar ?
Todo lo que se necesita instalar se describe a continuacin: 1. Instalar Java y el JDBC en la mquina. Para instalar tanto la plataforma JAVA como la API JDBC, simplemente se siguen las instrucciones de descarga de la ltima versin del J2SDK (Java 2 Standard Development Kit). Junto con el J2SDK tambin viene JDBC.. La ltima versin de Java se puede encontrar en el sitio de Sun http://java.sun.com

2. Instalar un driver en la mquina.

El driver debe incluir instrucciones para su instalacin. Para los drivers JDBC escritos para controladores de bases de datos especficos la instalacin consiste slo en copiar el driver en la mquina; no se necesita ninguna configuracin especial. El driver "puente JDBC-ODBC" no es tan sencillo de configurar. Si se descarga la ltima versin de Java, automticamente se obtendr una versin del puente JDBCODBC, que tampoco requiere una configuracin especial. Sin embargo, ODBC, si lo necesita. Si no se tiene ODBC en la mquina, es necesario preguntarle al vendedor del driver ODBC sobre su instalacin y configuracin. Afortunadamente, la interfaz JDBC y muchos de los drivers JDBC que se necesitan estn instalados por defecto as que ya se tienen si se ha instalado el J2SDK. Los drivers que no han sido instalados por defecto pueden ser descargados de la web. 3. Instalar el Controlador de Base de Datos si es necesario. Si no se tiene instalado un controlador de base de datos, es necesario seguir las instrucciones de instalacin del vendedor. La mayora de los usuarios tienen un controlador de base de datos instalado y trabajarn con una base de datos establecida.

Compatibilidad con SQL


SQL es el lenguaje estndar para acceder a bases de datos relacionales. Desafortunadamente, SQL no es an un estndar como se deseara. Un rea de dificultad es que los tipos de datos usados por diferentes DBMSs (DataBase Management Systems) a veces vara, y las variaciones pueden ser significantes. JDBC maneja esto definiendo un conjunto genrico identificadores de tipos de SQL en la clase java.sql.Types. Otra rea de dificultad con la compatibilidad de SQL es que a pesar que la mayora de los DBMSs usan una forma estndar de SQL para funcionalidades bsicas, ellos no conforman el estndar de sintaxis y semntica de SQL ms recientemente definido para funcionalidades avanzadas. Por ejemplo, no todas las bases de datos soportan procedimientos almacenados o outer joins y aquellos que lo hacen, no siempre son consistentes con los dems. Tambin el soporte para elementos de SQL3 y tipos de datos vara enormemente. Se espera que la porcin de SQL que es realmente estndar se expanda para incluir ms y ms funcionalidades. Por el momento, sin embargo, la API JDBC debe soportar SQL como es. Una manera en que la API JDBC maneja este problema es permitiendo que cualquier cadena de consulta sea pasada hacia el driver de DBMS. Esto significa que una aplicacin es libre de usar tantas funcionalidades de SQL como desee, pero corriendo el riesgo de recibir un error en algunos DBMSs. En efecto, una consulta de aplicacin puede ser algo ms que SQL, o puede ser un dialecto especializado de SQL

diseado para DBMSs especficos (para consultas de documentos o imgenes, por ejemplo). Una segunda forma en que JDBC maneja los problemas de compatibilidad con SQL es proveyendo de clusulas de escape del estilo ODBC. La sintaxis de escape provee una sintaxis estndar de JDBC para muchas de las reas comunes de divergencias de SQL. Por ejemplo, hay escapes para literales de fechas y para llamadas a procedimientos almacenados. Para aplicaciones complejas, JDBC maneja la compatibilidad en una tercer manera. La API provee informacin descriptiva acerca del DBMS por medio de la interfaz DatabaseMetaData as estas aplicaciones pueden adaptarse a los requerimientos y capacidades de cada DBMS. Dado que la API JDBC es usada como una API base para desarrollar herramientas de acceso a bases de datos y otras APIs, tambin tiene que afrontar el problema de compatibilidad para cualquier cosa construida sobre ella. Un driver JDBC debe soportar por lo menos ANSI SQL-92 Entry Level. Note que aunque la API JDBC 2.0 incluye soporte para SQL3 y SQLJ, los drivers JDBC no estn obligados a soportarlos.

Arquitectura
El Modelo JDBC de Java
JDBC logra sus metas a travs de un conjunto de interfaces Java, cada una implementada en forma diferente por proveedores individuales. El conjunto de clases que implementan las interfaces de JDBC, para un motor de bases de datos particular, es lo que llamamos driver JDBC. Existen drivers especficos para cada DBMS, que son implementaciones diferentes para cada uno de ellos. Cada uno de estos drivers posee cdigo diferente para establecer la comunicacin con el DBMS correspondiente. Existen varias configuraciones para ejecutar una aplicacin usando JDBC, pero lo principal es tener accesible el driver que se conectar al DBMS. La idea detrs de JDBC es que al desarrollar una aplicacin para una base de datos, no se tenga que pensar sobre la implementacin de las clases subyacentes, ya que JDBC oculta las caractersticas especficas de cada base de datos y nos permite preocuparnos slo en los aspectos de la aplicacin que estamos desarrollando. JDBC consiste bsicamente de cinco clases en el paquete java.sql. Las clases son: N java.sql.Driver que representa al driver. N java.sql.DriverManager que es la que establece las conexiones con las fuentes de datos, mediante la carga de los drivers o controladores JDBC. N java.sql.Connection hace la conexin a la base de datos. N java.sql.Statment ejecuta las clusulas. N java.sql.ResultSet recibe los resultados de las clusulas que se ejecutaron.

Los drivers de bases de datos JDBC se definen mediante clases que implementan la interfaz Driver. Cada driver sabe como convertir peticiones SQL para una base de datos concreta. Si no se dispone del driver adecuado, no se podr establecer una conexin con la base de datos deseada, ya que el JDBC depende de las implementaciones concretas de cada fabricante. Por lo tanto, lo primero que debe llevar a cabo un programa es cargar el driver adecuado para que el cdigo Java pueda comunicarse con la base de datos. Slo la clase java.sql.DriverManager se encuentra completamente implementada; las dems son implementadas por el driver especfico de la base de datos con la que se desea trabajar.

Tipos
Una vez que su motor de base de datos esta instalado y su base de datos esta configurada, necesitar un driver JDBC para el motor de base de datos. Los motores de bases de datos mas comerciales, tales como Oracle, tienen drivers comerciales JDBC. La mayora de estos, sin embargo, le permiten tenerlo por un perodo de prueba gratis para experimentar con el driver. Estos drivers vienen en cuatro variantes. Los tipos 1 y 2 estn pensados para programadores que escriben aplicaciones, mientras que los tipos 3 y 4 son tpicamente usados por los vendedores de Middleware o bases de datos. La siguiente es una descripcin mas detallada de estos drivers:

Tipo 1: Puente JDBC-ODBC.


Provee acceso JDBC va uno o mas drivers Open Database Connectivity (ODBC). ODBC, el cual precede a JDBC, es ampliamente usado por desarrolladores para conectarse a bases de datos en un ambiente no Java.

A plicacin Java

A PI JDBC

'ULYHUV 3XHQWH -'%&  2'%&


O DBC Lib. Cliente DB Servidor B.D.
Qu es el Puente JDBC-ODBC ? El Puente JDBC-ODBC es un driver JDBC que implementa operaciones JDBC al traducirlas a operaciones ODBC. Para ODBC esto aparenta como un programa de aplicacin normal. El Puente implementa JDBC para cada base de datos para la cual haya un driver ODBC disponible. El puente es implementado como el paquete Java sun.jdbc.odbc y contiene una librera nativa que se usa para acceder ODBC. El Puente JDBC-ODBC fue desarrollado por Sun para tomar ventaja del grandsimo nmero de fuentes de datos para ODBC. Las applets Java son escritas usando la API de Java. Estas llamadas a JDBC son pasadas al puente JDBC-ODBC y convertidas en las APIs ODBC del lenguaje C. Las llamadas ODBC son luego pasadas al driver propietario ODBC para el almacenamiento de los datos en el back-end. La ventaja principal de usar el puente JDBC-ODBC es que las aplicaciones pueden acceder fcilmente a las bases de datos de mltiples vendedores al elegir el driver apropiado para ODBC, debido a que las llamadas JDBC son convertidas a ultimo momento en llamadas ODBC. Sin embargo, este tipo de conectividad a bases de datos no implica un gasto considerable y complejidad, debido a que las llamadas deben ir desde JDBC al puente y luego al driver ODBC, luego, de ODBC a la API nativa del cliente, y para terminar en la base de datos. Adicionalmente este tipo de driver no permite la entrega just-in-time de las Applets de Java. El software debe ser pre instalado en el cliente usando el puente JDBC-ODBC. Los requerimientos para pre instalar el software implican las mismas cargas administrativas que para aplicaciones cliente/servidor. Adems, el puente JDBC-ODBC tpicamente es adecuado solamente para aplicaciones intranet donde hay un control y mantenimiento de las mquinas clientes.

El puente JDBC- ODBC Si es posible use un driver puro de Java JDBC en vez de un puente y/o un driver ODBC. Esto elimina completamente la configuracin del cliente requerida por ODBC. Tambin elimina el potencial de que la Java VM pueda ser corrompida por un error en el cdigo nativo existente en el puente o en el driver ODBC (esto es: la librera nativa del puente, la librera de manejo del driver ODBC, la librera del driver de ODBC y la librera de la base del cliente). Se recomienda el uso del driver JDBC-ODBC para prototipar los esfuerzos y para casos cuando no existe otra tecnologa basada en drivers JDBC. Si es comercial, o sea que todos los drivers Java- JDBC estn disponibles, se recomienda que sea usado en vez del Puente. Obteniendo un Driver JDBC Se recomienda que se obtenga un driver comercial de JDBC de su vendedor de bases de datos o su vendedor de bases de datos middleweare, y adems se recomienda el uso del puente de JDBC-ODBC solamente para usos experimentales o cuando no hay otra alternativa. Implementacin del puente El puente es implementado en Java y usa mtodos nativos para llamar a ODBC. Instalacin El puente es instalado automticamente con Java 2 SDK, Standard Edition, como paquete sun.jdbc.odbc. Se debe ver la propia informacin de su vendedor de drivers para ODBC para la instalacin y configuracin de ODBC. No se necesita una configuracin especial para el puente. Se debe referir al proveedor de base de datos para informacin de configuracin e instalacin. Usando el puente El puente es usado abriendo una conexin JDBC usando una URL con el subprotocolo odbc. Antes de que la conexin sea establecida, la clase del driver del puente, sun.jdbc.odbc.JdbcOdbcDriver, debe ser tambin agregada a la propiedad Java.lang.System llamada jdbc.drivers, o debe ser explcitamente cargada usando un cargador de clases Java. La carga explcita se puede hacer con la siguiente lnea de cdigo:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Cuando es cargado, el driver ODBC crea una instancia de si mismo y lo registra con el manejador de drivers JDBC. Usando el puente desde un Applet El uso de JDBC con un driver puro Java JDBC funciona bien con las Applets, a diferencia del driver del puente, que no lo hace con las Applets. La mayora de los Browsers no soportan el Puente Debido a que el Puente es un componente opcional del Java 2 SDK, Standard Edition, puede que este no sea provisto por el Browser. An si es provisto, solamente las Applets confiables (aquellas permitidas a escribir archivos) sern las capaces de usar

el puente. Se requiere esto para preservar la seguridad del Applet. Finalmente, y an si el Applet es confiable, las libreras de ODBC y del cliente de DBMS deben ser configuradas en cada cliente. Drivers ODBC conocidos para trabajar con el puente Los drivers ODBC estn disponibles para Oracle, Sybase, Informix, Microsoft SQL Server, e Ingres. Pros: Es una buena aproximacin para aprender JDBC. Puede ser til para compaas que ya tengan drivers ODBC instalados en cada mquina cliente tpicamente el caso de mquinas con Windows corriendo aplicaciones productivas. Quizs sea la nica manera de tener acceso a bases de datos de escritorios de bajo porte. Contras: No es para aplicaciones de gran escala. La performance se ve afectada debido a que hay algn costo asociado al trabajo de traduccin entre JDBC y ODBC. Adems, no soporta todas las caractersticas de Java. Los usuarios estn limitados por la funcionalidad subyacente del driver ODBC.

Tipo 2: Driver parcial de Java


Convierte las llamadas que el desarrollador escribe en la API JDBC de programacin de aplicaciones en llamadas que conectan con la interfaz de programacin de aplicaciones de la mquina cliente para la base de datos especfica., tal como Informix, IBM, Oracle o Sybase. De nuevo, esta solucin requiere software en el sistema del cliente.

A plicacin Java

API JDBC

'ULYHU SDUFLDO -'%&


Lib. Cliente DB Servidor B.D.
Pros: La performance es mejor que la del Tipo 1, en parte porque el driver del Tipo 2 contiene cdigo compilado que est optimizado para el sistema operativo del servidor de bases de datos del back-end. Contras: El usuario necesita asegurarse que el driver JDBC de la base de datos del vendedor est cargado en la mquina cliente. Debe haber cdigo compilado para cada sistema operativo sobre el cual se desee ejecutar la aplicacin. El mejor uso de ste es para ambientes controlados tales como Intranets.

Tipo 3: Drivers Java puros para middleware de bases de datos


ste tipo de driver tiene la caracterstica principal de que provee conectividad para muchas bases de datos diferentes. Traduce llamadas JDBC al protocolo del middleware del vendedor, el cual, a su vez, es convertido al protocolo especfico de la base de datos por el software del servidor del middleware. Como se puede ver, este driver es extremadamente flexible ya que no requiere cdigo instalado en el cliente y que un nico driver puede proveer acceso a mltiples bases de datos.

$SSOHW -DYD  $SOLFDFLyQ


A PI JDBC

'ULYHU SXUR -DYD -'%& 0LGGOHZDUH GH %'


Servidor B.D.
Pros: Mejor performance que los Tipo1 y Tipo 2. Puede ser usado cuando una compaa tiene mltiples bases de datos y quiere usar un nico driver JDBC para conectarlas a todas. Est basado en el servidor, as que no se necesita cdigo del driver de JDBC en cada mquina cliente. Por razones de performance, el componente del servidor del back-end est optimizado para el sistema operativo sobre el cual la base de datos se est ejecutando. Contras: Se necesita algo de cdigo especfico en el servidor del middleware. Si el middleware debe ejecutarse en diferentes plataformas, puede que sea mas efectivo un driver de Tipo 4.

Tipo 4: Driver Java puro directo a la base de datos.


Convierte llamadas JDBC en paquetes que son enviados a travs de la red en el formato propietario usado por la base de datos especfica. Permite realizar una llamada directa desde la mquina cliente a la base de datos.

$SSOHW -DYD  $SOLFDFLyQ

A PI JDBC

'ULYHU SXUR -DYD -'%&

Servidor B.D.
Pros: Mejor performance que los Tipos 1 y 2. No se necesita instalar software especial en el cliente y el servidor. Puede ser descargado dinmicamente. Cons: No esta optimizado para el sistema operativo del servidor, asi que el driver no puede tomar ventaja de las caractersticas del sistema operativo. ( El driver esta optimizado para la base de datos y puede tomar ventaja de las funcionalidades de la base de datos del servidor). Adems, el usuario necesita un driver diferente para cada base de datos diferente.

Versiones
JDBC Bsico cubre la API JDBC 1.0, el cual est incluido en el JDK 1.1. La segunda parte cubre la API JDBC 2.0, que forma parte de la versin 1.2 del JDK. Tambin describe brevemente las extensiones de la API JDBC, que, al igual que otras extensiones estndar, sern liberadas independientemente. La API de JDBC 2.0: Es el paquete Java.sql que est incluido en la versin JDK 1.2 (conocido como la API JDBC 2.0) e incluye muchas nuevas caractersticas no includas en el paquete Java.sql que forma parte de la versin JDK 1.1 ( referenciado como la API JDBC 1.0).

Con la API JDBC 2.0, se pueden realizar las siguientes cosas: Ir hacia adelante o hacia atrs en una hoja de resultados o movernos a un fila especfica. Hacer actualizaciones de las tablas de la base datos utilizando mtodos Java en lugar de utilizar comandos SQL. Enviar mltiples secuencias SQL a la base de datos como una unidad, o batch. Utilizar los nuevos tipos de datos SQL3 como valores de columnas.

Qu incluye la API de JDBC 2.0


La API de JDBC 2.0 incluye todo lo de la API que es parte de Java 2 SDK, Standard Edition, y tambin la API en la JDBC Standard Extension. La siguiente lista define varios trminos usados para referirse a la API de JDBC.
N

API JDBC 2.0 La API completa de JDBC, incluidas tanto en el paquete java.sql (la API ncleo de JDBC 2.0) y el paquete javax.sql (la API de JDBC Standard Extension). El paquete Java 2 SDK, Enterprise Edition, incluye la API completa de JDBC 2.0. API del ncleo de JDBC 2.0 El paquete java.sql: la API de JDBC que es parte de Java 2 SDK, Standard Edition, la cual incluye la API de JDBC 1.0 adems de la API de JDBC agregada en el paquete java.sql. Alguna de las nuevas caractersticas en este paquete son los Resul Sets navegables, actualizaciones por lote, y soporte para los nuevos tipo de datos de SQL3. La API de JDBC Standard Extension El paquete javax.sql: este paquete hace fcil construir aplicaciones del lado del servidor usando la plataforma Java ofreciendo una arquitectura abierta que soporta pooling de conexiones y transacciones distribuidas que abarcan mltiples servidores de bases de datos. La API de DataSource juega una parte integral en las capacidades y tambin trabaja con la Interfaz de Nombrado y Directorio de Java, (Java (tm) Naming and Directory Interfaz (tm) o JNDI) para mejorar la portabilidad y hacer el mantenimiento de cdigo ms fcil. El paquete javax.sql tambin provee la API de RowSet, la cual hace fcil el manejo de conjuntos de datos de virtualmente cualquier fuente de datos como de componentes JavaBeans.

Continuando con la poltica de mantener compatibilidad hacia atrs, las aplicaciones escritas usando la API JDBC 1.0 continuarn corriendo en ambas Java 2 SDK, Standard Edition, y en Java 2 SDK, Enterprise Edition, tal cual siempre lo han hecho. Habiendo sido bien diseada desde el principio, la API JDBC 1.0 esencialmente no ha cambiado. Las aplicaciones que usan aspectos agregados en la API de JDBC 2.0 debern ser ejecutadas usando un driver que soporte estas caractersticas. El paquete java.sql, que es parte de la API del ncleo, es incluido automticamente cuando se baja la Java 2 SDK, Standard Edition. Un vendedor de drivers puede incluir el paquete java.sql con su producto, pero si el driver no incluye el paquete, puede ser descargado del sitio en la red de JDBC en la direccin de URL: http://java.sun.com/products/jdbc Tambin es posible el obtener el paquete javax.sql, descargando el Java 2 SDK Enterprise Edition el cual incluye tanto el paquete Java.sql como el paquete javax.sql. Los programadores que no estn programando componentes Enterprise

JavaBeans (EJB) o cdigo de servidores, probablemente quieran descargar el Java 2 SDK, Standard Edition en vez del Java 2 SDK, Enterprise Edition para limitar la cantidad de espacio de disco usada.

Qu es pooling de conexiones ?
Originalmente, JDBC 1.0 defina las APIs de JAVA para acceso a bases de datos relacionales. El modelo del manejador de conexiones, especifica cmo es accedida la informacin a travs de las APIs de JDBC 1.0. Con la introduccin de JDBC 2.0, las APIs fueron separadas en dos partes: La API del ncleo de JDBC 2.0 Esta contiene mejoras evolucionadas, pero se ha mantenido pequea y enfocada como la API de JDBC 1.0 para promover el fcil uso de la misma. El cdigo escrito par la API de 1.0 contina trabajando para la API de 2.0. Las clases de la API 2.0 siguen estando en el paquete java.sql El paquete opcional de la API JDBC 2.0 Este soporta la integracin con estndares adicionales de Java. Incluyendo JNDI (Java Naming and Directory Interface), JTA (Java Transaction API) y EJB (Enterprise JavaBeans) El pooling de conexin es el mantenimiento de un grupo de conexiones a bases de datos para reuso de aplicaciones en servidores de aplicaciones y es parte del paquete opcional de la API JDBC 2.0. Otra parte del paquete opcional de la API provee el uso de JNDI y objetos DataSource en vez de objetos DriverManager de JDBC 1.0 para acceder a los datos relacionales.

Beneficios del pooling de conexiones


Cada vez que un recurso intenta acceder a la base de datos, se debe conectar a dicha base. Una conexin de base de datos incurre en un gasto; requiere recursos para crear la conexin, mantenerla, y luego liberarla cuando ya no sea necesaria. El consumo es particularmente alto para aplicaciones basadas en Web, debido a que los usuarios de estas aplicaciones se conectan y se desconectan mas a menudo. Adicionalmente, las interacciones con el usuario tpicamente son cortas debido a la naturaleza dinmica de los usuarios de Internet. A menudo, se gasta mas esfuerzo en conectar y desconectar que el que se gasta durante las interacciones en si mismas. Adems, debido a que los pedidos de Internet pueden arribar virtualmente desde cualquier lado, los volmenes solicitados pueden ser grandes y difciles de predecir. Para solucionar ste problema, se permite a los administradores establecer un pool de conexiones de bases de datos que pueden ser compartidas por aplicaciones en un servidor de aplicaciones. El pooling de conexiones esparce la carga a lo largo de las peticiones de los usuarios, conservando los recursos para futuros pedidos. El pooling de conexiones puede mejorar el tiempo de respuesta de cualquier aplicacin que requiera conexiones, especialmente las aplicaciones basadas en Web. Cuando un usuario realiza una solicitud de un recurso a travs de la Web, el recurso accede a un DataSource. La mayora de las solicitudes no incurren en el gasto de crear una nueva conexin debido a que el DataSource puede localizar y utilizar una conexin

existente de todas las conexiones disponibles. Cuando la conexin es satisfecha y la respuesta es enviada al usuario, el recurso retorna la conexin al conjunto de conexiones para su reutilizacin. De nuevo, se evita el gasto de desconectarse. Cada pedido de un usuario incurre en una fraccin del costo de la conexin o desconexin. Luego de que los recursos iniciales son usados para producir las conexiones en el pooling, el costo adicional es insignificante debido a que las conexiones existentes son reutilizadas.

Pautas para escribir un driver JDBC


A continuacin se describe superficialmente los requerimientos mnimos que un driver debe implementar para cumplir con la API JDBC. El objetivo buscado es generar una API estndar que funcione uniformemente a travs de todas las bases de datos. Por esto se impone a los drivers una serie de requerimientos pero, debido a las inevitables diferencias entre las bases de datos (por ejemplo, soporte de diferentes caractersticas SQL o semnticas diferentes para las mismas operaciones), se permiten algunas variantes en situaciones particulares. A continuacin se esbozan los requerimientos y las variantes permitidas, se solucionan algunos problemas de implementacin, y se listan las responsabilidades de seguridad de los drivers.

Requerimientos para todos los drivers


Pese a que los requerimientos descritos a continuacin se aplican a las implementaciones estndar de un driver JDBC, en general, un driver no est obligado a soportar una caracterstica que su DBMS no soporta. Implementar mtodos en las interfaces Deben implementarse todos los mtodos en las interfaces contenidas en la API JDBC 1.0 de forma de soportar al menos ANSI SQL-92 Entry Level. Como ya se mencion no se le exige a los drivers ir ms all de este nivel si el DBMS no lo permite. En los casos de mtodos que implementan caractersticas no soportadas por el DBMS deben programarse lanzando una SQLException. Las interfaces de metadatos (DatabaseMetaData, ResultSetMetaData) deben ser completamente implementadas. En caso de que el proveedor del driver implemente de la interfaz javax.sql.RowSet tambin debe implementarse interfaz javax.sql.RowSetMetaData. Los drivers JDBC que soportan transacciones distribuidas implementan las interfaces XAConnection y XADataSource. Interfases que siempre deben ser completamente java.sql.Driver implementadas java.sql.DatabaseMetaData java.sql.ResultSetMetaData Interfaces deben ser implementadas, con java.sql.CallableStatement mtodos opcionales si la implementacin de los java.sql.Connection mismos depende de una caracterstica que el java.sql.PreparedStatement DBMS no suporta java.sql.ResultSet java.sql.Statement

Interfaces opcionales (pueden omitirse si un java.sql.Array DBMS no puede soportarlas) java.sql.Blob javax.sql.ConnectionEventListener javax.sql.ConnectionPoolDataSource java.sql.Clob javax.sql.DataSource javax.sql.PooledConnection java.sql.Ref java.sql.SQLData java.sql.SQLInput java.sql.SQLOutput java.sql.Struct javax.sql.XAConnection javax.sql.XADataSource Clases y excepciones completamente java.sql.BatchUpdateException implementadas en la API JDBC 2.1 javax.sql.ConnectionEvent java.sql.DataTruncation java.sql.Date java.sql.DriverManager java.sql.DriverPropertyInfo java.sql.SQLException java.sql.SQLWarning java.sql.Time java.sql.Timestamp java.sql.Types Implementar un inicializador esttico Todo driver debe tener inicializador esttico (static initializer), que haga lo siguiente al cargarse: 1. Crear un instancia de s mismo 2. Registrar la instancia recin DriverManager.registerDriver

creada,

invocando

el

mtodo

Esto permite la carga y registro de drivers con el DriverManager invocando el mtodo Class.forName con el nombre de la clase Driver como argumento. Los drivers cargados va la API DataSource no se registran automticamente con el DriverManager. Las clases DriverManager y DriverPropertyInfo as como la interfaz Driver entrarn en desuso en el futuro. Soportar extensiones al SQL-92 Entry Level Algunas caractersticas que van ms all del SQL-92 Entry Level son ampliamente soportadas por los DBMS y es deseable incluirlas como una parte de la definicin de cumplimiento JDBC. De esta forma las aplicaciones podrn depender de la portabilidad de estas caractersticas. En cambio el SQL-92 Transitional Level (el siguiente nivel de cumplimiento SQL definido por ANSI) no es ampliamente soportado. Incluso cuando sus semnticas son soportadas, la sintaxis frecuentemente es distinta entre los diferentes DBMSs. Por

esto, JDBC define dos clases de extensiones al SQL-92 Entry Level que pueden ser soportadas por un driver JDBC. Sintaxis y semntica del Selective Transitional Level Actualmente la nica caracterstica a este nivel que es requerida para compatibilidad es DROP TABLE. Sintaxis de escape que soporta la Un driver debera examinar y traducir esta semntica del Selective Transitional Level. sintaxis de escape en sintaxis especfica del DBMS. Soportar funciones escalares JDBC soporta funciones numricas, de strings, de tiempo, de fecha, de sistema, y de conversin sobre valores escalares. Si se desea, la especificacin del Open Group CLI provee ms informacin sobre la semntica de las funciones escalares. Si un DBMS soporta una funcin escalar, el driver tambin deber soportarla. Debido a que las funciones escalares son soportadas por diferentes DBMSs con sintaxis apenas diferentes, es responsabilidad del driver mapearlas a la sintaxis apropiada o implementar directamente las funciones en su cdigo. Un usuario debera ser capaz de encontrar cuales funciones son soportadas invocando mtodos de metadatos (por ejemplo, DatabaseMetaData.getNumericFunctions o DatabaseMetaData.getStringFunctions)

Funciones numricas

Funciones de strings

Funciones de tiempo y fecha

Funciones de sistema Funciones de conversin

ABS(number), ACOS(float), ASIN(float), ATAN(float), ATAN2(float1, float2), CEILING(number), COS(float), COT(float), DEGREES(number), EXP(float), FLOOR(number), LOG(float), LOG10(float), MOD(integer1, integer2), PI(), POWER(number, power), RADIANS(number), RAND(integer), ROUND(number, places), SIGN(number), SIN(float), SQRT(float), TAN(float), TRUNCATE(number, places) ABS(number), ACOS(float), ASIN(float), ATAN(float), ATAN2(float1, float2), CEILING(number), COS(float), COT(float), DEGREES(number), EXP(float), FLOOR(number), LOG(float), LOG10(float), MOD(integer1, integer2), PI(), POWER(number, power), RADIANS(number), RAND(integer), ROUND(number, places), SIGN(number), SIN(float), SQRT(float), TAN(float), TRUNCATE(number, places) ASCII(string), CHAR(code), CONCAT(string1, string2), DIFFERENCE(string1, string2), INSERT(string1, start, length, string2), LCASE(string), LEFT(string, count), LENGTH(string), LOCATE(string1, string2[, start]), LTRIM(string), REPEAT(string, count), REPLACE(string1, string2, string3), RIGHT(string, count), RTRIM(string), SOUNDEX(string), SPACE(count), SUBSTRING(string, start, length), UCASE(string) CURDATE(), CURTIME(), DAYNAME(date), DAYOFMONTH(date), DAYOFWEEK(date), DAYOFYEAR(date), HOUR(time), MINUTE(time), MONTH(date), MONTHNAME(date), NOW(), QUARTER(date), SECOND(time), TIMESTAMPADD(interval, count, timestamp), TIMESTAMPDIFF(interval, timestamp1, timestamp2), WEEK(date), YEAR(date) DATABASE(), IFNULL(expression, value), USER() CONVERT(value, SQLtype)

Proveer bloqueo para actualizaciones y eliminaciones posicionadas No todos los DBMSs soportan las actualizaciones y eliminaciones posicionadas. Una aplicacin puede usar los mtodos JDBC DatabaseMetaData.supportsPositionedUpdate y DatabaseMetaData.supportsPositionedDelete para determinar si una conexin en particular las soporta. Cuando son soportadas las actualizaciones y eliminaciones posicionadas (por ejemplo, sentencias del tipo SELECT FOR UPDATE), el driver debe asegurar que las filas seleccionadas son adecuadamente bloqueadas de manera de que no ocasionen anomalas de actualizacin u otros problemas de concurrencia. Soportar Multithreading Todas las operaciones sobre los objetos java.sql y javax.sql requieren ser seguras en contextos de multihilos. Deben ser capaces de lidiar correctamente con la existencia simultanea de varios hilos (threads) invocando el mismo objeto. An cuando se espere que en la prctica la mayora de los objetos JDBC sern accedidos desde un solo hilo, es necesario el soporte para multihilos. Algunos drivers pueden permitir mayor concurrencia que otros, pero los desarrolladores deberan asumir una ejecucin completamente concurrente. Si el driver requiere alguna forma de sincronizacin, entonces l debe proveerla. Lanzar excepciones en presencia de parmetros de entrada truncados Si los parmetros de entrada son truncados, una excepcin (DataTruncation exception) deber ser lanzada. Usar comportamientos por defecto para los tipos de datos SQL3 Un driver escrito para un DBMS que soporta los tipos de datos SQL3, debe implementar los comportamientos por defecto para los tipos de datos SQL3. La API ncleo JDBC 2.1 especifica los comportamientos por defecto para los tipos de datos SQL3 en dos reas generales: (1) Su tiempo de vida y (2) si son implementados usando localizadores (locators), o sea si se materializan sus datos en el cliente o no.

Variantes permitidas
Debido a las variaciones ya mencionadas entre los distintos DBMS, tanto en las funcionalidades como en la sintaxis, se permite cierta variacin en las implementaciones de drivers. El SQL usado por una base de datos puede diferir del usado por otras bases de datos. Por ejemplo, diferentes bases de datos ofrecen diferente soporte para los outer joins. Tambin puede variar la sintaxis para algunas de las caractersticas de SQL. La interfaz java.sql.DatabaseMetaData ofrece un conjunto de mtodos con los cuales un usuario puede determinar exactamente que caractersticas SQL son soportadas por una base de datos en particular. Es responsabilidad de quien escribe el driver asegurarse de que el mtodo DatabaseMetaData retorne informacin precisa acerca de que soporta el DBMS y que no.

Cuando una funcionalidad no es soportada Algunas caractersticas introducidas en la API ncleo JDBC 2.1 son opcionales en drivers escritos para DBMSs que no las soportan. En estos casos los mtodos que soportan la caracterstica pueden lanzar una SQLException. A continuacin se listan la caractersticas opcionales junto con los mtodos DatabaseMetaData que indican si el DBMS y el driver las soportan. Mtodo DatabaseMetaData.supportsResultSetType DatabaseMetaData.supportsResultSetConcurrency DatabaseMetaData.supportsBatchUpdates DatabaseMetaData.getTypeInfo Caracterstica opcional Result sets navegables Result sets actualizables Actualizaciones batch Tipos de datos SQL3 Almacenamiento y obtencin de objetos Java

Adems DatabaseMetaData.getUDTs retonar las descripciones de las UDTs definidas en un esquema dado y DatabaseMetaData.getTypeInfo las descripciones de los tipos de datos disponibles dentro del DBMS. Variacin en propiedades fundamentales Tambin se permite variacin en algunas propiedades fundamentales, como los niveles de aislamiento de transacciones. Invocando los mtodos de la interfaz DatabaseMetaData pueden obtenerse las propiedades por defecto de la base de datos actual y el rango de propiedades que soporta. Agregando funcionalidad Los vendedores de bases de datos que quieren exponer funcionalidades adicionales que son soportadas por sus bases de datos pueden crear subclases de las clases JDBC existentes y ofrecer mtodos adicionales en las nuevas subclases.

Responsabilidades de seguridad de los drivers


Debido a que los drivers JDBC pueden ser usados en diferentes situaciones, es importante que los escritores de drivers sigan ciertas reglas de seguridad simples para prevenir que Applets hagan conexiones ilegales a la base de datos. Estas reglas no son necesarias si un driver es descargado como un Applet, debido a que el manejador estndar de seguridad se encargar de esto. Las reglas mencionadas se aplican al momento en que un conexin es abierta, ya que este es el momento en el que el driver y la mquina virtual deberan verificar que el invocador es realmente alguien que tiene permitido conectarse a la base de datos. Luego no deben hacerse verificaciones adicionales. Slo los drivers de cdigo nativo necesitan verificar el acceso a la base de datos antes de generar la conexin. Los drivers Java puros pueden confiar en el manejador de seguridad. Verificar conexiones TCP compartidas Si un driver JDBC intenta abrir una conexin TCP, una vez abierta deber ser verificada por el manejador de seguridad Java (Java security manager). El manejador de

seguridad verificar si hay un Applet en la pila de invocaciones actual y si la hay, restringir la apertura al conjunto de mquinas que la Applet esta autorizada a invocar. Como ya se mencion, de esta manera, un driver JDBC puede dejar la verificacin a la hora de la apertura de conexiones TCP a la Mquina Virtual de Java (Java Virtual Machine). En el caso de que un driver JDBC quiere compartir una nica conexin TCP entre diferentes conexiones a bases de datos, es ste el que tiene la responsabilidad de la verificacin de los accesos a bases de datos usando esa conexin. Por lo tanto, antes de permitirse la reutilizacin una conexin TCP existente, el driver JDBC deber verificar con el manejador de seguridad que quien hace la invocacin actual tiene permitido conectarse a esa mquina. En los casos en que no est permitida la conexin el mtodo SecurityManager.checkConnect lanzar una java.lang.SecurityException. Verificar todos los accesos locales a archivos Si un driver JDBC necesita acceder a cualquier dato local en la mquina actual, entonces debe asegurar que quien hace la invocacin tiene permitido abrir los archivos. El mtodo Security.checkRead lanzar una java.lang.SecurityException en el caso de que no est permitido el acceso. Como con las conexiones TCP, el driver debe slo ocuparse de los problemas de seguridad si los archivos son compartidos entre mltiples hilos invocadores y el driver est siendo como cdigo confiable. Asumir lo peor Algunos drivers pueden usar mtodos nativos para interconectar con libreras de bajo nivel de la base de datos. En estos casos, puede ser difcil de determinar cuales archivos o conexiones de red sern abiertas por las libreras de ms bajo nivel. En estas circunstancias el driver debe asumir el peor caso, en cuanto a seguridad, y negar todo el acceso a bases de datos a Applets descargadas a menos de que el driver confe completamente en que el futuro acceso ser inofensivo. Lanzar una SQLException en caso de excepciones Como se ha dicho, si un DBMS no soporta cierta funcionalidad, un mtodo para soportarla debera implementarse de manera de que lance una SQLException. Pero hay casos en que una Java RunTimeException y una SQLException pueden superponerse. Es estos casos, es recomendado que la SQLException sea lanzada porque esto da a JDBC control ms consistente sobre los errores.

Implementaciones sugeridas
Bsqueda anticipada de filas JDBC ofrece mtodos para la obtencin de columnas individuales dentro de filas individuales, un campo por vez. Actualmente no se ofrece una forma de hacer bsquedas anticipadas en porciones ms grandes. Pese a esto, se recomienda que los drivers normalmente realicen bsquedas anticipadas de filas en porciones adecuadas, para reducir el nmero de interacciones con la base de datos.

Los nuevos mtodos en la API ncleo JDBC 2.1 establecen el nmero de filas a ser buscados, pero un driver puede ignorar esto, especialmente si este parmetro entra en conflicto con optimizaciones hechas por DBMS y/o el driver. Anlogamente, los drivers pueden tambin ignorar la direccin de bsqueda. Ofrecer mtodos "finalize para Applets Siempre se aconseja a los usuarios (programadores) invocar el mtodo close sobre objetos Statement y Connection cuando ya no sern utilizados, pero es frecuente los usuarios se olviden de esto. Por eso, los drivers JDBC deben ofrecer mtodos finalize para ocuparse de los casos en que ocurre esta omisin. Evitar estados dependientes de la implementacin Algunas bases de datos tienen restricciones que resultan en dependencias ocultas entre objetos JDBC. Los estados dependientes de la implementacin dificultan la portabilidad, y las implementaciones que los contienen nos son totalmente compatibles. Un ejemplo de esto sera un caso en que dos objetos Statement se abren, pero cuando el objeto ResultSet de uno est en uso no se puede ejecutar el otro objeto Statement.

Ventajas / Desventajas
Similitudes y diferencias con ODBC
Sun Microsystems ha logrado con Java toda una plataforma empresarial y cuenta con JDBC para el acceso a bases de datos compatibles con ODBC, es decir, se manipula la informacin mediante objetos. JDBC hace para Java lo que ODBC para C (o Visual Basic). A diferencia de ODBC, no se indica que nivel de SQL usar (ODBC tiene varios niveles), sino que simplemente se pasan las clusulas SQL al driver especfico de la base de datos. Es un complemento a la plataforma empresarial Java para manejar bases de datos relacionales o que entienden SQL. JDBC al igual que ODBC y ADO proporciona una abstraccin al programador que le permite olvidarse de la conexin con la base de datos y concentrarse en el desarrollo de la aplicacin y SQL.

API JDBC Vs ODBC


Antes del desarrollo de la API de JDBC, la API ODBC de Microsoft (Open DataBase Connectivity) era la interfaz de programacin ms usada para acceder a bases de datos relacionales. OBDC ofrece la habilidad de conectarse a casi todas las bases de datos en casi todas las plataformas. Entonces surge una pregunta Por qu no slo usar ODBC desde Java? La respuesta es que se puede usar ODBC desde Java, pero esto se hace de una mejor manera con la ayuda de la API de JDBC en la forma de puente JDBC-ODBC. Por lo que la pregunta a responder ahora es Por qu es necesaria de API de JDBC ? Existen varias respuestas a sta pregunta: 1- ODBC no es apropiado para el uso directo desde Java porque utiliza una interfaz de C. Las llamadas desde Java a cdigo nativo en C tienen varias desventajas en seguridad, implementacin, robustez y portabilidad automtica de las aplicaciones. 2- Una traduccin literal de la API C de ODBC a una API de Java no sera deseable. Por ejemplo, Java no maneja punteros y ODBC los utiliza en gran medida, incluyendo el puntero a void genrico. Se puede pensar de JDBC como un ODBC traducido a una interfaz de alto nivel orientada a objetos, lo que es natural para programadores en Java. 3- ODBC es difcil de aprender. Mezcla caractersticas simples y complejas a la vez, y tiene opciones complejas incluso para consultas simples. La API de JDBC, por otro lado, fue designada para mantener simple lo que es simple mientras permite capacidades ms avanzadas donde se las requiere. Adems tambin es ms fcil de usar simplemente porque es una API de Java, lo que significa que el programador no necesita preocuparse del manejo de memoria o alineamiento de bytes por ejemplo. 4- Cuando el driver JDBC es escrito completamente en Java, su cdigo es automticamente instalable, portable y seguro en todas las plataformas Java desde computadoras en la red hasta mainframes.

En resumen, la API de JDBC es una interfaz natural de Java por trabajar con SQL. La API JDBC mantiene algunas de las caractersticas bsicas de diseo de ODBC; en efecto, ambas interfaces estn basadas en un nivel de interfaz con instrucciones SQL X/Open. La gran diferencia est en que la API JDBC reafirma el estilo y virtudes de Java y va ms all, enviando sentencias SQL a un RDBMS. Microsoft ha introducido nuevas API mas all de ODBC, como OLE (Object Linking and Embedding) , ADO (ActiveX Data Objects), y RDS (Remote Data Service). De alguna manera, estas APIs van en la misma direccin que JDBC; por ejemplo, OLE y ADO son interfaces orientadas a objetos que pueden ser usadas para ejecutar sentencias SQL. Sin embargo, OLE es una interfaz de bajo nivel designada para herramientas ms que para desarrolladores. ADO es mas nueva y se parece mas a JDBC, pero no est desarrollada en un ambiente Java puro. Tampoco RDS esta escrito en Java, y no es portable. Ms recientemente, Microsoft ha introducido UDA (Universal Data Access) que cubre lo que es OLE DB, ADO, RDS y ODBC. La API 2.0 de JDBC cubre toda la funcionalidad importante de UDA y posee adems otras caractersticas que no se encuentran en UDA, como por ejemplo soporte para SQL3.

Comparacin del uso de JDBC en un modelo de 2 capas y en uno de 3 capas:


En cuanto al esfuerzo de programacin, el modelo de dos capas es ms fcil de comprender y mantener que el modelo de tres capas. Todo el cdigo es ejecutado en el cliente y no se necesita de programas adicionales para correr en alguna de las mquinas. Adems, los cambios afectan slo al programa que se ejecuta en el cliente. En cuanto a escalabilidad y realizacin, a la hora de desarrollar una aplicacin de calidad comercial, se debe estar consciente de los aspectos de performance y escalabilidad de la aplicacin a construir. Teniendo esto en cuenta, puede apreciarse que debido a la relacin directa uno a uno existente entre el cliente y el manejador de la base de datos, para el caso del modelo de dos capas, una solucin en ste sentido seguramente tenga problemas de escalabilidad. Por ejemplo, una aplicacin que maneja miles de conexiones de clientes en forma concurrente a una base de datos representar seguramente una enorme carga tanto para la red como para el DBMS. Por lo tanto, en ste sentido sera deseable una solucin multi-capas que use un servidor para mediar entre los clientes y el DBMS. Adems, un driver desarrollado para uso en una arquitectura de dos capas puede tener otros problemas como por ejemplo el hecho de no poder tomar ventaja de las capacidades multi-hilos de Java en caso de que las bibliotecas del cliente no sean multihilos, y de esa manera perder performance, por decirlo de alguna manera. Al usar un driver con un servidor intermedio que sea robusto y se maneje en un ambiente puro de java, el cliente puede operar como una aplicacin multihilo y permitir al servidor intermedio el manejo de la sincronizacin y la espera de los resultados de la comunicacin con una biblioteca de cliente de un solo hilo. Otro problema que presenta la arquitectura en dos capas es que muchos drivers de JDBC contienen cdigo nativo, dependiente del sistema, que es rechazado por los navegadores web debido a temas de seguridad, por lo que es necesario utilizar drivers implementados en java. Java se encuentra bien posicionado para la implementacin de soluciones en 3 capas ya que facilita la comunicacin va sockets entre el servidor y el cliente y soporta la programacin multi-hilos necesaria para el acceso multi-usuario.

En cuanto a economa de transmisin y seguridad de los datos, en la arquitectura de dos capas, cada aplicacin del cliente debe comprender la aplicacin JDBC, es decir, tiene visibilidad sobre la misma. ste cdigo adicional es transmitido a los clientes, causando una necesidad de procesamiento extra de este lado. Por otro lado, la aplicacin cliente se conecta directamente con el servidor de base de datos, necesitando por lo tanto un usuario y contrasea no encriptados para el acceso, lo cual dificulta la creacin de una buena poltica de seguridad. En el modelo de 3 capas, la aplicacin cliente es ms pequea, siendo su principal tarea la de recuperar datos y mostrarlos en pantalla (cliente ms fino). Respecto al otro aspecto mencionado en el prrafo, en la arquitectura de 3 capas, la capa intermedia puede ocultar al cliente cualquier tipo de informacin referente al servidor de la base de datos, siendo sta capa intermedia la que sabe como encontrar y manipular los datos. El servidor intermedio puede proveer a los clientes de un pool de conexiones al DBMS para evitar la necesidad de tener un usuario y contrasea para la base de datos.

Alternativas a JDBC
Sin JDBC, slo existen soluciones propietarias dispares de acceso a bases de datos. Dichas soluciones propietarias obligan al diseador a construir una capa de abstraccin por encima para crear cdigo independiente de la base de datos. Slo luego que sta capa de abstraccin est completa es que el desarrollador se mueve realmente a escribir la aplicacin. Adems, la experiencia que uno tiene con esa capa de abstraccin no se traduce inmediatamente a otros proyectos u otras personas o empresas que casi estn usando ciertamente sus propias capas de abstraccin para proporcionar el acceso a una variedad de motores de bases de datos. Claro, la especificacin de ODBC existe para mantener esta capa de abstraccin universal para los lenguajes como C y C++ as como para herramientas de desarrollo populares como Delphi, PowerBuilder, y VisualBasic. Desgraciadamente, ODBC no disfruta de la independencia de plataforma que posee Java. Usando el diseo de interfaz de JDBC, la aplicacin servidora puede elegir, en tiempo de ejecucin, la base de datos segn que tipo de cliente est conectado.

Limitaciones de JDBC
Una de las desventajas es que Java es un poco lento. Sin embargo, el idioma promete estar con nosotros como una herramienta bsica durante muchos aos. JDBC es sumamente til para el desarrollo de aplicaciones del lado del servidor en que se puede controlar el ambiente en un buen grado.

Ventajas de la tecnologa JDBC


A continuacin se presentan algunas de las ventajas que presenta JDBC: Influencia de datos de empresa existentes Con la tecnologa JDBC, los negocios no se cierran en cualquier arquitectura propietaria y pueden continuar usando sus bases de datos e informacin de acceso fcilmente, aun cuando sta es guardada en diferentes sistemas de gerenciamiento de bases de datos.

Desarrollo simplificado de la empresa La combinacin de la API de Java y la API de JDBC hace del desarrollo de aplicaciones algo fcil y barato. JDBC oculta la complejidad de muchas tareas de accesos a datos, mientras hace la mayora del trabajo pesado en forma transparente para el programador. La API de JDBC es simple de aprender y barata de mantener. Cero configuracin para redes de computadoras Con la API de JDBC, no se requiere ninguna configuracin del lado del cliente. Con un driver escrito en Java, toda la informacin que se necesita para hacer una conexin est completamente definida por el URL de JDBC o por un objeto registrado por medio de JNDI. Cero configuracin del lado del cliente permite la centralizacin del mantenimiento del software. Cero Instalacin Un driver basado en JDBC no necesita de una instalacin especial; es bajado automticamente como parte de la aplicacin que realiza las llamadas JDBC. Impulso en la industria Lderes en bases de datos, middleware y vendedores han estado construyendo el soporte para la tecnologa JDBC en muchos productos. Esto asegura que clientes puedan construir aplicaciones portables de Java mientras escogen, de una amplia gama de productos competitivos, la mejor solucin que se adecue a sus necesidades. Conexin a la base de datos identificada por una URL La tecnologa JDBC se aprovecha de las ventajas de las URLs estndar de Internet para identificar las conexiones a las bases de datos. La API de JDBC incluye una buena manera de identificar y conectar a una fuente de datos, usando un objeto DataSource, esto hace al cdigo an ms portable y ms fcil mantener.

Adems de esta ventaja importante, los objetos DataSource pueden proporcionar transacciones distribuidas y connection pooling, esenciales para la informtica de base

de datos de empresa. Esta funcionalidad se proporciona transparentemente al programador.

Conclusiones
Las grandes compaas desarrolladoras de bases de datos apoyaron casi desde un principio a JDBC como tecnologa de conexin a sus DBMS. Esto, sumado al auge de Java, presion al resto de las compaas (que no queran verse marginadas en un mercado creciente y muy competitivo) a seguir el mismo camino, y ofrecer soporte JDBC. Lo anterior deriv en la abundancia de drivers, middlewares y aplicaciones que utilizan JDBC. Entre las virtudes y desventajas de JDBC, se pueden listar:
N N N N N N N N N

Facilita la programacin de aplicaciones. Extiende la portabilidad multiplataforma de Java al acceso a fuentes de datos. Permite abstraerse de ciertas operaciones de bajo nivel como por ejemplo establecer la conexin con el DBMS. Soluciona el problema de manejar varias fuentes de datos heterogneas a la vez. Se encuentra disponible para la mayora de los manejadores. Para los DBMS que no tengan driver JDBC pero si ODBC permite la conexin a las mismas utilizando el puente JDBC-ODBC. Tiene ciertas limitaciones de performance debido a que utiliza Java el cual es interpretado. No precompila las sentencias SQL que se mandan al manejador lo que podra derivar en errores. Utilizndolo por si solo, el mapeo de objetos a datos relacionales tiene sus dificultades.

La mayora de las desventajas antes mencionadas, son tolerables o algunas pueden resolverse utilizando otras APIs que se construyen a partir de la base de JDBC. Adems existe abundante informacin tcnica acerca de JDBC lo que hace sus problemas subsanables ms fcilmente. JDBC aparenta un cierto dinamismo que va acompasando los cambios de la tecnologa actual, desarrollndose adems un conjunto de herramientas a partir de JDBC, que permiten trabajar a mayores niveles de abstraccin (SQLJ, Java Blend, etc) facilitando la tarea de programacin. Java, junto con JDBC, constituyen una herramienta de uso recomendable para desarrollar aplicaciones orientadas a objetos con acceso a bases de datos. No obstante, debe evaluarse cuidadosamente las caractersticas del medio donde se pondr en produccin, los diferentes requerimientos de performance, seguridad y robustez para determinar cual es la variante (configuraciones de arquitectura) de sta herramienta que se ajuste ms a los requerimientos de la aplicacin.

Referencias
Tutorial JDBC http://java.programacion.net/jdbc/ Sybase jConnect for JDBC Technical Whitepaper - Technical whitepaper for jConnect http://www.sybase.com/ http://www.sybase.com/detail/1,6904,1009766,00.html Introduction to Databases for the Web: Pt 4 - By Selena Sol - November 23, 1998 http://www.databasejournal.com/sqletc/article.php/26861_1431601_1 Database Programming with JDBC and Java -By George Reese - 1st Edition June 1997 1-56592-270-0, Order Number: 2700 Chapter 4: http://www.oreilly.com/catalog/javadata/chapter/ch04.html Getting Started with JDBC API http://java.sun.com/products/jdk/1.4/docs/guide/jdbc/getstart/GettingStartedTOC.fm.ht ml JDBC Data Access API FEATURTES http://java.sun.com/products/jdbc/features.html The JDBC API Universal Data Access for the Enterprise http://java.sun.com/products/jdbc/overview.html Bases de Datos con Java (4ta parte) http://www.cic.ipn.mx/ute/ogonzalez/Cursos/javabas/bdedjbcuatro.htm JDBC Paper Two-tier and three-tier architectures http://rcswww.urz.tu-dresden.de/~nuehren/jdbc/4_2.htm Replicacin de bases de datos en Internet - Ing. Cayetano Prez Martnez http://148.204.45.136:9000/labsiybd/proyectos/TESIS/cayetano/DTeMae.htm For Driver Writers Sun http://java.sun.com/products/jdbc/driverdevs.html

También podría gustarte