Tema:
Java Database Connectivity (JDBC)
INTRODUCCIN
La API de Java JDBC permite a las aplicaciones Java para conectarse
a bases de datos relacionales a travs de una API estndar, por lo que
las aplicaciones Java se independizan (casi) de la base de datos que
utiliza la aplicacin.
JDBC estandariza cmo conectarse a una base de datos, cmo ejecutar
consultas contra l, cmo navegar por el resultado de una consulta de
este tipo, y la forma de ejecutar las actualizaciones en la base de datos.
JDBC no estandariza el SQL enviados a la base de datos. Esto todava
puede variar de base de datos a la base de datos.
Java Database Connectivity (JDBC)
Java Database Connectivity, ms conocida por sus siglas JDBC, es una API que
permite la ejecucin de operaciones sobre bases de datos desde el lenguaje de
programacin Java, independientemente del sistema operativo donde se ejecute o
de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de
base de datos que se utilice.
Usando JDBC es fcil enviar sentencias SQL a virtualmente cualquier base de
datos relacional. En otras palabras, con la API JDBC no es necesario escribir un
programa para acceder a una base de datos tipo Access, otro programa para
acceder a una base de datos tipo Oracle y as para cada tipo de base de datos. Uno
puede escribir un solo programa usando la API JDBC y el programa ser capaz de
enviar sentencias SQL a la base de datos apropiada. Y, con una aplicacin escrita
en Java, uno no tiene por qu preocuparse por escribir diferentes programas para
diferentes plataformas. La combinacin de JDBC permite al programador escribir
una vez y ejecutar en cualquier sitio.
Java, siendo robusto, seguro, fcil de usar, fcil de entender, y automticamente
descargable en una red, es un excelente lenguaje base para aplicaciones con bases
de datos. Lo que es necesario es una forma para que las aplicaciones Java puedan
entenderse con bases de datos de diferentes tipos. JDBC es el mecanismo para
hacer esto .JDBC extiende lo que puede hacerse con Java. Por ejemplo, con Java
y la API de JDBC, es posible publicar una pgina web que usa informacin obtenida
de una base de datos remota. O una compaa puede usar JDBC para conectar
todos sus empleados (incluso si estos estn usando un conglomerado de mquinas
Windows, Macintosh y UNS) a una o ms bases de datos internas va una intranet
Interfaz de programacin de aplicaciones (IPA) o API (del ingls Application
Programming Interface) es el conjunto de funciones y procedimientos o mtodos,
en la programacin orientada a objetos que ofrece cierta biblioteca para ser utilizado
por otro software como una capa de abstraccin. Son usadas generalmente en las
bibliotecas.
El API JDBC se presenta como una coleccin de interfaces Java y mtodos de
gestin de manejadores de conexin hacia cada modelo especfico de base de
datos. Un manejador de conexiones hacia un modelo de base de datos en particular
es un conjunto de clases que implementan las interfaces Java y que utilizan los
mtodos de registro para declarar los tipos de localizadores a base de datos (URL)
que pueden manejar. Para utilizar una base de datos particular, el usuario ejecuta
su programa junto con la biblioteca de conexin apropiada al modelo de su base de
datos, y accede a ella estableciendo una conexin; para ello provee el localizador a
la base de datos y los parmetros de conexin especficos. A partir de all puede
realizar cualquier tipo de tarea con la base de datos a la que tenga permiso:
consulta, actualizacin, creacin, modificacin y borrado de tablas, ejecucin de
procedimientos almacenados en la base de datos, etc.
De una forma simple, JDBC posibilita hacer tres cosas:
Establecer una conexin con una base de datos
Enviar sentencias SQL
Procesar los resultados
JDBC ofrece el paquete java.sql, en el que existen clases muy tiles para
trabajar con bases de datos.
Clase Descripcin
DriverManager Para cargar un driver
Connection Para establecer conexiones con las bases de datos
Statement
Para ejecutar sentencias SQL y enviarlas a las
BBDD
ResultSet Para almacenar el resultado de la consulta
JDBC versus ODBC y otras APIs
La API ODBC de Microsoft es probablemente la interface de programacin para
acceder a bases de datos relacionales ms extensamente usada. Ofrece la
posibilidad de conectar a casi la totalidad de bases de datos.
Por qu no usar simplemente ODBC desde Java?
Se puede usar ODBC desde Java, pero esto se hace mejor con la ayuda de JDBC
en la forma de un Puente JDBC-ODBC
Por qu se necesita JDBC?
ODBC no es apropiado para su uso directo desde Java porque usa una
interface en C. Las llamadas desde Java a cdigo C nativo tienen un nmero
de inconvenientes en la seguridad, implementacin, robustez y portabilidad
de las aplicaciones.
Una traduccin literal de la OBDC API en C a una API en Java no sera
deseable. Por ejemplo, Java no tiene punteros y ODBC hace un copioso uso
de ellos. Se puede pensar en JDBC como ODBC traducido a un interface
orientado a objetos que es natural para programadores en Java.
ODBC es duro de aprender. Mezcla caractersticas elementales con otras
ms avanzadas y tiene complejas opciones incluso para las consultas ms
simples. JDBC, por otro lado, fue diseado para mantener simples las cosas
simples mientras permite posibilidades ms avanzadas cuando se requieren.
Una API en Java como JDBC es necesaria para conseguir una solucin
puramente Java. Cuando se usa ODBC, el gestor de controladores (driver
manager) y los controladores (drivers) ODBC deben ser manualmente
instalados en cada mquina cliente. Sin embargo, cuando el driver JDBC est
escrito totalmente en Java, el cdigo JDBC es automticamente instalable,
portable y seguro en todas las plataformas Java desde computadoras en red
hasta mainframes.
En definitiva, la JDBC API es una interface natural de Java para las abstracciones
y conceptos bsicos de SQL. Est fundamentada en ODBC por lo que los
programadores familiarizados con ODBC encontrarn fcil de aprender JDBC.
JDBC mantiene las caractersticas de diseo bsicas de ODBC. La gran diferencia
es que JDBC est basada y refuerza el estilo y virtudes de Java y, por supuesto, es
fcil de usar
Controladores JDBC
Tipos de controladores
1. Drivers de JDBC
Java puede acceder a la base de datos mediante un driver o controlador JDBC
apropiado que pueda utilizar las clases que permiten el acceso a la base de datos.
Existen diversos tipos de drivers, que utilizan distintos protocolos. En particular, en
esta asignatura se utilizar el llamado Puente JDBC-ODBC, que se explicar ms
adelante.
2. JDBC-ODBC Bridge
El Puente JDBC-ODBC es un controlador JDBC que implementa operaciones JDBC
traducindolas en operaciones ODBC. Para ODBC aparece como una aplicacin
normal. El Puente implementa JDBC para cualquier base de datos para la cual haya
disponible un driver ODBC.
El Puente est implementado en Java y usa mtodos nativos de Java para llamar a
ODBC. Se instala automticamente con el Java Development Kit como el paquete
(sun.jdbc.odbc).
Si es posible, usar un driver JDBC 100% Java en lugar de un Puente y un driver
ODBC. Esto elimina completamente la configuracin en el cliente requerida por
ODBC.
JDBC 3.0 API
La JDBC 3.0 API comprende dos paquetes:
1. El paquete java.sql
Provee la API para acceso y procesamiento de datos guardados en una fuente de
datos usualmente una base de datos relacional usando el lenguaje de programacin
Java. Esta API incluye un mbito donde diferentes drivers pueden ser instalados
dinmicamente para acceder a diferentes fuentes de datos. Aunque la JDBC API
est preparada principalmente para pasar sentencias SQL a una base de datos,
permite leer y escribir datos desde cualquier fuente de datos con un formato tabular
En este paquete existen clases muy tiles para trabajar con bases de datos que
son:
DriverManager
La clase DriverManager es la capa gestora de JDBC, trabajando entre el usuario
y el controlador (driver). Se encarga de seguir el rastro de los controladores que
estn disponibles y establecer la conexin entre la base de datos y el controlador
apropiado.
La clase DriverManager mantiene una lista de clases Driver que se han registrado
llamando al mtodo DriverManager.registerDriver. Un usuario normalmente no
llamar al mtodo DriverManager.registerDriver directamente, sino que ser
llamado automticamente por el controlador (driver) cuando este se carga. El
usuario lo que hace es forzar que se cargue el driver, lo cual puede hacerse de dos
formas, aunque la recomendada es llamando al mtodo Class.forName(). Esto
carga la clase driver explcitamente.
Connection
Un objeto Connection representa una conexin a una base de datos. Una sesin
con una conexin incluye las sentencias SQL que son ejecutadas y los resultados
que son devueltos a travs de dicha conexin. Una misma aplicacin puede tener
una o ms conexiones con una sola base de datos o puede tener conexiones con
varias bases de datos diferentes. La forma estndar de establecer una conexin con
una base de datos es llamando al mtodo DriverManager.getConnection.
Este mtodo toma como parmetro una cadena de caracteres que contiene una
URL. La clase DriverManage trata de localizar el driver que pueda conectar con la
base de datos representada por esa URL.
Statement
Un objeto Statement se usa para enviar sentencias SQL a una base de datos. Una
vez que se ha establecido una conexin con una base de datos particular, esa
conexin puede ser usada para enviar sentencias SQL. Un objeto Statement se crea
con el mtodo creatStatement de Connection como en el siguiente fragmento de
cdigo:
Connection con = DriverManager.getConnection(url);Statement stmt =
con.createStatement();
La sentencia SQL que ser enviada a la base de datos es proporcionada como
argumento a uno de los mtodos para ejecutar un objeto Statement:
ResultSet rs =stmt.executeQuery(SELECT a, b, c FROM Table2);
ResultSet
Un ResultSet contiene todos los registros (filas) que satisfacen las condiciones
impuestas en una sentencia SQL y proporciona acceso a los datos en dichos
registros a travs de un conjunto de mtodos get que permiten acceder a los
diferentes campos o atributos (columnas) del registro actual.
Un ResultSet mantiene un cursor que apunta al registro actual. El mtodo
ResultSet.next() se usa para moverse al siguiente registro del ResultSet , haciendo
el siguiente registro el registro actual.
Los mtodos getXXX proporcionan los medios para obtener los valores de los
campos, atributos o columnas del registro actual.
Para cada registro, los valores de las columnas pueden ser obtenidos en cualquier
orden, pero para la mayor portabilidad, se debe hacer de izquierda a derecha y leer
el valor dela columna slo una vez. Tanto el nombre de la columna como el nmero
de esta pueden ser usados para designar la columna de la cual se quiere obtener
el valor.
Si en el ejemplo anterior la columna a es de tipo entero, la b del tipo cadena de
caracteres y la c de tipo coma flotante, la siguiente porcin de cdigo imprimira
los valores de todos los registros:
while(rs.next()){
int i =rs.getInt( a );
String s = rs.getString( b );
Float f = rs.getFloat( c);
System.out.println( ROW= + i + + s + + f);