Upload
saul1905
View
5
Download
0
Embed Size (px)
DESCRIPTION
JDBC en java
Citation preview
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.
Cdigo JAVA
API ODBC
Driver ODBC Puente
JDBC-ODBC
Tipos de Drivers JDBC
Los drivers JDBC se clasifican en cuatro categoras:
9Drivers Tipo 1 Se conecta con la bd
Traduce cdigo java
en invocaciones
ODBC
Driver ODBC Puente
JDBC-ODBC
Cdigo JAVA
Base de Datos API 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).
Driver
JDBC
Cdigo JAVA
Tipos de Drivers JDBC
9Drivers Tipo 2
Protocolo especfico
del Proveedor
Driver
JDBC
Es un driver que usa protocolos de acceso a datos optimizados por el
fabricante
Cdigo JAVA
Base de Datos 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.
Cdigo JAVA Servidor de
Acceso a DB
Driver
Tipo 1 2 JDBC Driver
(Java puro)
Tipos de Drivers JDBC
Front-End que accede al
9Drivers Tipo 3 middleware. Es un proxydriver
Base de Datos
Driver Tipo 1 2
Servidor de
Acceso a DB
JDBC Driver (Java puro)
Cdigo JAVA
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.
Cdigo JAVA
Tipos de Drivers JDBC
9Drivers Tipo 4
Protocolo especfico del Proveedor
DriverJDBC
(Java Puro)
Cdigo 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 Connection ResultSet ResultSetMetaData DataBaseMetaData
PreparedStatement
CallableStatement
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
. . .
Connection miConexion;
try {
Nombre del Driver URL de la Base de Datos (Nombre del ODBC)
Esta conexin ser usada para realizar todas las operaciones sobre la Base de Datos.
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)
Store Procedure a ejecutarse
Se usa para ejecutar Stored Procedures
throws SQLException
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
void updateString(int indiceColum, String y) throws SQLException
......................................... .........
Si el ResultSet es actualizable
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
ps.setInt(1, 55);
ps.executeQuery();
Setea los parmetros de la sentencia pre-compilada
Ejecuta la sentencia pre-compilada