Professional Documents
Culture Documents
JDBC
Es un interfaz orientado a objetos de Java para SQL. Se utiliza para enviar sentencias SQL a un sistema gestor de BD (DBMS). Con JDBC tenemos que continuar escribiendo las sentencias SQL. No aade ni quita potencia al SQL.
4
Arquitectura JDBC
La filosofa de JDBC es proporcionar transparencia al desarrollador frente al gestor de BD. JDBC utiliza un Gestor de Controladores que hace de interfaz con el controlador especfico de la BD. Aplicacin Java Driver Manager de JDBC Controlador Oracle Controlador JDBC-ODBC Controlador DB2
SGBD Oracle BD
Access BD
BD
SGBD DB2
Ncleo de JDBC
Estos interfaces se utilizarn el 90% de las veces que trabajemos con una BD.
<<Interface>>
<<Interface>>
<<Interface>>
<<Interface>>
Driver
Connection
Statement
ResultSet
DriverManager
<<Interface>> PreparedStatement
<<Interface>> ResultSetMetaData
DriverPropertyInfo
<<Interface>> CallableStatement
7
12
Cliente
: DriverManager
: Connection
Conexin a la BD
13
Obtener conexin BD
Subprotocolo: identifica el mecanismo de conexin o el controlador JDBC concreto. Dominio: Depende del subprotocolo, puede ser simplemente un nombre simple para la base de datos o una serie de parmetros que permiten encontrar la BD.
15
16
El objeto Connection
Si no se producen excepciones el mtodo getConnection nos devuelve un objeto que implementa la interfaz Connection. Podemos crear varias conexiones con distintas bases de datos o incluso con la misma. Cada conexin representa una sesin con la BD. El objeto Connection nos permitir acceder a la base de datos para realizar operaciones sobre ella y obtener resultados.
17
Cliente
: DriverManager
: Connection
: Statement
18
Crear sentencia de BD
Base de datos
Objeto Statement
Objeto Connection
SQL
20
Cliente
: DriverManager
: Connection
: Statement
: ResultSet
executeQuery( )
Ejecutar la consulta
23
Ejecutar consulta
Ejecucin de la sentencia
executeQuery(), ejecucin de consultas, sentencia SELECT. executeUpdate(), actualizaciones de valores en al base de datos. INSERT, UPDATE, DELETE. Slo devuelve la cuenta de las columnas afectadas. execute(), se usa para ejecutar sentencias que no se conocen a priori o que devuelven resultados no homogneos.
24
Cliente
: DriverManager
: Connection
: Statement
: ResultSet
executeQuery( )
Recuperacin de datos
Cuando ejecutamos una consulta debemos emplear el mtodo executeQuery(), que devuelve un objeto ResultSet, que nos permitir acceder a los resultados. El ResultSet utiliza el concepto de cursor de base de datos para ir movindose por las filas de datos recuperadas. Las columnas pueden accederse en cualquier orden, utilizando su posicin o su nombre. El objeto ResultSet incluye mtodos getXXX que permiten recuperar valores de distintos tipos. 27
Cliente
: DriverManager
: Connection
: Statement
: ResultSet
executeQuery( )
33
DataTruncation
Informa de avisos de truncado de datos en las lecturas y al escribir datos. 34
BigDecimal
SQLException
SQLWarning
DataTruncation
35
Utilizacin de diferentes BD
JDBC permite utilizar distintas bases de datos sin cambiar el cdigo o haciendo retoques mnimos. Cambios que implica la utilizacin de una BD diferente:
controlador, url de la BD.
Tipos de controladores
JDBC es una especificacin que establece dos tipos de interfaces:
Interfaz de aplicacin, que permite acceder a una base de datos independientemente de su fabricante. Interfaz del controlador, al cual se deben adaptar los desarrolladores de controladores.
Actualmente en el mercado existen gran cantidad de controladores que varan en su arquitectura. Sun ha clasificado estos controladores en cuatro tipos.
http://industry.java.sun.com/products/jdbc/drivers
37
Controlador Tipo 1
Puente JDBC-ODBC
Servidor Cliente Cliente JDBC ODBC BD Java Serv. ODBC
BD
Serv. ODBC
BD
38
Controlador Tipo 2
Controlador utilizando APIs nativas
Servidor Cliente Cliente API JDBC BD Java nativa Serv. nativo
BD
39
Controlador Tipo 3
Controlador JDBC-NET Java puro
Servidor Cliente Cliente JDBC BD Java Serv. Serv. JDBC nativo
BD
BD
40
Controlador Tipo 4
Controlador Java puro y protocolo nativo
Servidor Cliente Cliente JDBC BD Java Serv. nativo
BD
41
42
Sentencias preparadas
Optimiza rendimiento en las sentencias que se ejecutan repetidamente. Caractersticas:
Sentencias en las que no se ponen explcitamente determinados valores. La base de datos slo tiene que interpretar la sentencia la primera vez. Optimizan la ejecucin.
43
45
47
48
49
50
Object
<<Interface>> DatabaseMetaData
Types
53
Utilizacin de transacciones
Tratamiento conjunto de sentencias SQL. COMMIT y ROLLBACK Mtodos para el tratamiento de transacciones:
commit(), roollback() y setAutoCommit().
57
JDBC 3.0: paquetes java.sql y javax.sql est integrado en la plataforma J2SE 1.4.
58
60
62
JDBC en un Servlet
Para emplear JDBC en un Servlet simplemente hay que incluir los paquetes de java adecuados. Debemos tener en cuenta los distintos tipos de controladores JDBC y cual nos interesa emplear, como en otros entornos. Se utilizan exactamente las mismas interfaces y las mismas clases para conectarnos y extraer informacin de la base de datos que en cualquier otra aplicacin Java.
63
66
Construccin de la consulta
Construiremos la cadena que constituye la sentencia SQL que posteriormente ejecutaremos contra la base de datos. Normalmente habr una parte fija que no vara y unos parmetros que crearemos a partir de la informacin del formulario.
67
68
Cierre de la conexin
Debemos asegurarnos que en el mtodo destroy() del servlet se cierren todas las conexiones. El recolector de basura podr liberar todos los recursos.
69
BD desde un servlet
Conexin con la BD. Recuperar parmetros del formulario de consulta. Construir la sentencia. Ejecucin de la consulta y devolucin de resultados. Cierre de la conexin.
Ver acceso a BD desde JSP
70
72
74
Ejemplo JavaBean BD
Ejemplo sencillo de un JavaBean que permite recuperar resultados de una BD. Mtodos bsicos:
obtenerFilas(), hace la consulta sobre la BD y guarda resultados en un vector interno. seleccionarFila(int f), se posiciona en el elemento f del vector y carga en cada uno de los atributos los valores de los campos.
77
78
<tr> <td><jsp:getProperty name=BeanBd property=campo1/></td> <td><jsp:getProperty name=BeanBd property=campo2/></td> <td><jsp:getProperty name=BeanBd property=campo3/></td> </tr> <% } %>
79