Está en la página 1de 14

Java & Conexin a Base de Datos

9JDBC (Java DataBase Connectivity) es API Java que permite a las aplicaciones
interactuar directamente con motores de base de datos relacionales.
9La API JDBC es una parte integral de la plataforma Java, por lo tanto no es
necesario descargar ningn paquete adicional para usarla. Incluye manejo de
conexiones a la base de datos, ejecucin de sentencias SQL y result sets que
encapsulan los resultados de la recuperacin de datos.
9JDBC provee una interface nica, que independiza a las aplicaciones del motor de
base de datos usado y del mecanismo de conexin.
9JDBC generaliza las funciones de acceso a datos ms comunes. Los mtodos estn
contenidos en los paquetes: java.sql y java.txt.
9Un driver JDBC es usado por la JVM para traducir las invocaciones JDBC
genricas en invocaciones que la bd propietaria entiende. Los drivers son clases Java
que se cargan en ejecucin.
9Existen drivers JDBC para la mayora de los motores de base de datos ms
populares. Tpicamente, los fabricantes de bases de datos proveen el driver JDBC
para su motor, aunque tambin es posible encontrarlos en Internet.

Tipos de Drivers JDBC


Los drivers JDBC se clasifican en cuatro categoras:
Se conecta con la bd
9Drivers Tipo 1
Puente
Puente
JDBC-ODBC

Driver
Driver ODBC
ODBC

Base de Datos

Traduce cdigo java


en invocaciones
ODBC

Cdigo
Cdigo JAVA
JAVA

API
API ODBC
ODBC

oEl driver JDBC-ODBC es parte de la plataforma Java. No es un driver 100 % Java.


oTraduce invocaciones JDBC a invocaciones ODBC a travs de libreras ODBC del
sistema operativo.
oNo es una solucin buena, pero en algunas situaciones es la nica, tal es el caso de
Microsoft Access.
Desventajas
oSe requieren mltiples capas de software para hacer las llamadas a la BD.
oSe requiere la instalacin de software adicional (configuracin ODBC).

Tipos de Drivers JDBC


Es un driver que usa
protocolos de acceso a
datos optimizados por el
fabricante

9Drivers Tipo 2
Protocolo especfico
del Proveedor
Driver
Driver
JDBC
JDBC
Base de Datos

Cdigo
Cdigo JAVA
JAVA

Cdigo Java y Nativo

oConceptualemente es similar al driver de tipo 1, excepto en que se usa una capa


menos (no est la capa de traduccin ODBC). No es un driver 100 % Java.
oCuando se realiza una invocacin a la BD a travs de JBDC, el driver traduce el
requerimiento en algo que la API del fabricante de la bd entiende.
oLa BD procesa el requerimiento y devuelve el resultado a travs de la API que lo
reenva al driver. El driver formatea el resultado al estndar JDBC y lo devuelve al
programa.

Tipos de Drivers JDBC


Front-End que accede al
middleware. Es un
proxydriver

9Drivers Tipo 3

Driver
Driver
Tipo
Tipo 11 22
Base de Datos

JDBC
JDBC Driver
Driver
(Java
(Java puro)
puro)

Cdigo
Cdigo JAVA
JAVA

Servidor
Servidor de
de
Acceso
Acceso aa DB
DB

oNo es un driver, es un front-end para acceso a servidores de bd.


oEl programa enva una invocacin JDBC a travs del proxy driver, quien lo
enva a la capa intermedia o middleware, sin traduccin.
oEl middleware completa el requerimiento usando otro driver JDBC.
oEl middleware habla con la BD a travs de un driver Tipo 1 o 2.
oRequiere de la instalacin de un middleware.

Tipos de Drivers JDBC


9Drivers Tipo 4
Protocolo especfico
del Proveedor
DriverJDBC
(Java Puro)

Cdigo
Cdigo JAVA
JAVA

Base de Datos

oEs un driver Java Puro que habla directamente con la BD.


oEs el mtodo ms eficiente de acceso a BD.
oNo requiere de ninguna librera adicional ni de la instalacin de un middleware,
con lo cual es de deployment ms simple.
oLa mayora de los fabricantes de BD proveen drivers JDBC de tipo 4 para sus
BD.

La API JDBC
Las clases e interfaces de la API JDBC estn en los paquetes java.sql y
java.text.
En estos paquetes se encuentran definidos mtodos que permiten: conectarse
a una BD, recuperar informacin acerca de la BD, realizar queries SQL a
la BD y ejecutar Stored Procedures.

DriverManager

Statement

PreparedStatement

CallableStatement

Connection

ResultSet

ResultSetMetaData

DataBaseMetaData

La API JDBC
Establecer una Conexin a la BD va JDBC
La conexin se establece a travs del driver, que se carga en ejecucin mediante el mtodo:
Class.forName(String nombredelDriver)
Una vez cargado el driver, la conexin a la BD se realiza invocando a alguno de los
siguientes mtodos (de clase) de la clase java.sql.DriverManager :
public static synchronized Connnection getConnection(String url, java.util.Properties info)
throws SQLException
public static synchronized Connnection getConnection(String url, String usr, String pwd)
throws SQLException
public static synchronized Connnection getConnection(String url) throws SQLException
El objeto Connection que se devuelve al programa se usa para realizar todas las
operaciones sobre la BD.

La API JDBC
Ejemplo de conexin a una BD

Esta
conexin ser
usada para
realizar
todas las operaciones
sobre la Base de Datos.

Nombre del Driver URL de la Base de Datos


...
(Nombre del ODBC)
Connection miConexion;
try {
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
miConexion = DriverManager.getConnection(jdbc:odbc:empleadosDB);
...
} catch (ClassNotFounException e1) {
// captura el error: no se encontr el driver
} catch (SQLException e2) {
// captura el error: no se pudo conectar a la BD
}

Se deben manejar dos excepciones. Una es para controlar si el


Driver no es encontrado y la otra para verificar si se realiz la
conexin.

La API JDBC
Ejecucin de sentencias SQL y Recuperacin de Resultados
Para realizar una consulta SQL a la BD se requiere de la creacin de un objeto: Statement,
PreparedStatement o CallableStatement usando uno de los mtodos del objeto
Connection.
Statement createStatement() throws SQLException
Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
PreparedStatement prepareStatement(String sql) throws SQLException
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
throws SQLException
Sentencia SQL a ser ejecutada

CallableStatement prepareCall(String sql) throws SQLException


PreparedStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)
throws SQLException
Store Procedure a ejecutarse
Se usa para ejecutar Stored Procedures

La API JDBC
Ejecucin de sentencias SQL y Recuperacin de Resultados
Clase Statement
Sobre el objeto Statement que devuelve el mtodo createStatement() se ejecuta la
sentencia SQL, que puede devolver o no resultados:
void executeUpdate(String sql) throws SQLException
Se usa para ejecutar las sentencias SQL: CREATE TABLE, INSERT, UPDATE Y DELETE

ResulSet executeQuery(String sql) throws SQLException


Se usa para ejecutar la sentencia SQL: SELECT
El objeto ResulSet puede ser recorrido y actualizado, de acuerdo a como fue creado el
objeto Statemament

La API JDBC
Ejecucin de sentencias SQL y Recuperacin de Resultados
El resultado de un executeQuery(), es devuelto en un objeto ResultSet. Este objeto contiene
un cursor que puede manipularse para hacer referencia a una fila particular del Resultset.
Inicialmente se ubica en la posicin anterior a la primera fila. El mtodo next() avanza una
fila. Cada invocacin a next() retorna true si se trata de una fila vlida y false cuando se
llega al fin del resultset.

9Recorrer el ResultSet
boolean next() throws SQLException
boolean first() throws SQLException
boolean last() throws SQLException

Si el ResultSet es scroleable
Devuelve true si el cursor est en una fila vlida y false si el
ResultSet est vaci

9Recuperar y Actualizar campos del ResultSet


Los campos de cada fila del resultset puede obtenerse mediante su nombre o posicin. El mtodo a usar
depende del tipo de dato almacenado
String getString(int indiceColum) throws SQLException
String getString(String nombreCol) throws SQLException
int getInt(int indiceCol) throws SQLException
int getInt(String nombreCol) throws SQLException
Si el ResultSet es actualizable
void updateString(int indiceColum, String y) throws SQLException
Para actualizar la bd se invoca a
.........................................

.........

updateRaw()

La API JDBC
Ejecucin de sentencias SQL y Recuperacin de Resultados
String creaTablaEmple = CREATE TABLE Empleados (Apellido VARCHAR(32),+
Nombres VARCHAR(), Legajo VARCHAR(), Edad INTEGER);
try {
Statement sent = miConexion.createStatement();
sent.executeUpdate(creaTablaEmple);
} catch (SQLException e1) { }

try {
Statement sent = miConexion.createStatement();
ResultSet resul = sent.executeQuery(SELECT * FROM Empleados WHERE Edad>55);
while (resul.next()){
out.println(resul.getString( APELLIDO+,+resul.getString(Apellido));
}
} catch (SQLException e1) { }

La API JDBC
Prepared Statement
Un sentencia preparada (prepared statement) es un tipo de sentencia que mejora la
performance de las consultas.
Una sentencia preparada se precompila antes de ser usada. La versin precompilada
acepta diferente nmero de parmetros.
A diferencia de las sentencias tradicionales cuando se crean requieren de la sentencia SQL
como argumento del constructor. Esta sentencia es enviada al motor de BD para su
compilacin y cuando se ejecuta el motor de BD la corre sin previa compilacin.
Las sentencias preparadas manejan parmetros, con lo cual pueden ejecutares muchas veces
con distintos parmetros.
9Creacin de una sentencia preparada
PreparedStatement ps = cn.prepareStatement(SELECT * FROM Empledos+ Apellido,
Nombre WHERE edad >?)
Parmetro de la sentencia SELECT

9Configuracin de los parmetros antes de la ejecucin de la sentencia


Setea los parmetros de la sentencia
ps.setInt(1, 55);
Ejecuta la sentencia pre-compilada
ps.executeQuery();

pre-compilada