Sunteți pe pagina 1din 21

Professional Java Developer Escuela de Postgrado y Estudios Continuos

JDBC – Framework de Acceso a Datos de Java

Recuperación y actualización de datos con JDBC

Ing. Rolando Steep Quezada Martí


Martínez
rqm@upnorte.edu.pe

17-
17-1
Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez

Objetivos

•Usar JDBC para conectar y ejecutar comandos SQL desde una aplicación Java sobre una
base de datos
•Explorar el API JDBC de conexión a base de datos.
•Comprender los pasos para el desarrollo de aplicaciones con acceso a bases de datos.
•Entender las diferentes categorías de drivers JDBC y poder distinguir la solución
apropiada para casos particulares.
•Lograr controlar la ejecución de consultas y la extracción de datos.
•Poder construir aplicaciones ligeras que accedan a procedimientos almacenados y
ejecuten consultas dinámicas.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-1
Professional Java Developer Escuela de Postgrado y Estudios Continuos

(JDBC) Java DataBase Connectivity

• JDBC es una API estándar que implementa la estrategia universal de acceso a datos
de JAVA.

• La API JDBC provee acceso a bases de datos relacionales (RDBMS), así como a
fuentes de datos tabulares (planillas de cálculo). El único requerimiento es disponer
del driver JDBC apropiado.

• La API JDBC es una parte integral de la plataforma Java. Desde J2SE 1.4/J2EE 1.4.
se incluye JDBC 3.0.

• JDBC es usado por aplicaciones de escritorio, applets y servlets.

Llamados Comandos de
JDBC base de datos

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-2

(JDBC) Java DataBase Connectivity

El paquete java.sql contiene el conjunto de interfaces que define el API JDBC. Este
paquete es parte de J2SE.

La API JDBC provee una interface de programación única, que independiza a las
aplicaciones del motor de base de datos usado. Incluye manejo de conexiones a base de
datos, ejecución de sentencias SQL, store procedures, soporte de transacciones, etc.

La API JDBC define un conjunto de interfaces que el proveedor de base de datos


implementa, en un código llamado driver JDBC.

El driver JDBC es usado por la JVM para traducir las invocaciones JDBC genéricas en
invocaciones que la base de datos propietaria entiende. Los drivers son clases Java que se
cargan en ejecución.

Usando JDBC se puede escribir código para:


•Conectarse a uno o más servidores de base de datos
•Ejecutar comandos SQL
•Obtener un conjunto de resultados (ResultSet) que permiten desplazarse sobre el
resultado de una consulta (Select)
•Obtener la información Meta (Estructura) de un servidor base de datos (Esquemas
y tablas).

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-2
Professional Java Developer Escuela de Postgrado y Estudios Continuos

El API JDBC

• JDBC esta presente en el JDK de Java ( desde el JDK 1.1).

• Los paquetes que lo conforman :


– java.sql
– javax.sql paquete opcional que se incluye en JDBC 2.0 o
posterior

• El código es independiente del gestor que utilitzen


– Portable
– Escalable

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-3

El API JDBC

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-3
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Tipos de Drivers: JDBC-ODBC Bridge


(categoría 1)
• El driver JDBC-ODBC es parte de la plataforma Java. No es un driver 100 % Java.

• Traduce invocaciones JDBC a invocaciones ODBC a través de librerías ODBC del


sistema operativo.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-4

Tipos de Drivers: El bridge ODBC-JDBC (categoría 1)

Sun ha desarrollado un puente (bridge) entre JDBC y ODBC. Ambas especificaciones


están basadas en el estándar X/Open, que es una interface (API) a nivel de comandos
SQL.

Este tipo de driver usa el driver ODBC específico para la base de datos que se desea
acceder.

No es una solución buena, pero en algunas situaciones es la única, tal es el caso de


Microsoft Access.

Desventajas

• Se requieren múltiples capas de software para hacer las llamadas a la BD.


• Se requiere la instalación de software adicional (configuración ODBC) en la máquina
dónde se ejecuta la aplicación.
• No son portables ya que dependen de librerías nativas.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-4
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Tipos de Drivers: Native-API partly-Java


(categoría 2)
• Son drivers escritos parte en Java y parte en código nativo. El driver usa una librería
cliente nativa, específica de la BD con la que quiere conectarse. No es un driver 100
% Java.

• La aplicación Java hace una invocación a la base de datos a través del driver JBDC,
el driver traduce el requerimiento, en invocaciones a la API del fabricante de la base
de datos. A través de este cliente nativo fluyen los requerimientos a la DB.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-5

Tipos de Drivers: El bridge JDBC-Protocolo DBMS (categoría 2)

Este tipo de driver utiliza Java para hacer llamadas al API de acceso (protocolo) del DBMS
que debe estar disponible en el cliente. Este último es quien provee la conectividad y
acceso a la base de datos.

Entonces el driver es una implementación parcial en Java y depende de el ejecutable


(código binario) del API al DBMS se encuentre en el cliente.

Por ejemplo IBM, provee el Client Application Enabler (CAE) para acceder al motor
relacional DB2 UDB.

La base de datos procesa el requerimiento y devuelve el resultado a través del cliente


nativo que lo reenvía al Driver JDBC. El driver formatea el resultado al estándar JDBC y lo
devuelve al programa.

Desventajas

•No es portable, depende de librerías nativas.


•Requiere de la instalación del cliente nativo en la máquina dónde se ejecuta la aplicación.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-5
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Tipos de Drivers: JDBC-Net pure Java


(categoría 3)
• Son drivers que usan un cliente Java puro (cliente JDBC) que se comunica con un
middleware server (o servidor JDBC) usando un protocolo independiente de la bd (por
ejemplo TCP/IP).

• El programa Java envía un requerimiento a la BD a través del Driver JDBC quien lo


envía al middleware server, sin traducción.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-6

Tipos de Drivers: JDBC - Protocolo Genérico de red (categoría 3)

Este tipo de driver utiliza los protocolos de red que vienen con el JDK (kit de desarrollo de Java) para
conectarse a un servidor. En este último se traducen los requerimientos a transacciones específicas
del DBMS.

Esta forma no requiere la existencia de código ejecutable en el lado del cliente, pero implica la
necesidad de un componente middleware para procesar las transacciones específicas.

El middleware server completa el requerimiento usando otro driver JDBC( de tipo 1 o 2)


que es el que se conecta a la BD.

Todas las funciones que no son especificadas en Java son de responsabilidad del middleware.

El protocolo genérico de red es flexible pues no requiere código instalado en el cliente, es así que
con el mismo driver puede accederse a diferentes bases de datos (un ambiente heterogéneo).

Requiere de la instalación de un middleware server en la máquina dónde se ejecuta el


motor de BD.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-6
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Tipos de Drivers: Native-protocol pure Java


(categoría 4)
• Son drivers escritos íntegramente en Java Puro que hablan directamente con la base
de datos, mediante protocolos de red estándares.

• Son altamente portables. Una vez compilados pueden usarse en cualquier sistema.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-7

Tipos de Drivers: JDBC nativo (categoría 4)

Este tipo de driver está enteramente escrito en Java y se comunica directamente a la Base
de datos con el protocolo de red del DBMS.

Esta comunicación directa se implementa a través de conexiones de red (“sockets”).

Es el método más eficiente de acceso a base de datos.

No requiere de ninguna librería adicional ni de la instalación de un middleware, con lo cual


es más simple su puesta en producción.

La mayoría de los fabricantes de Base de Datos proveen drivers JDBC de tipo 4 para sus
Bases de Datos.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-7
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Esquema de uso de JDBC en aplicaciones Java

La aplicación Java envía comandos SQL usando la API JDBC, al driver


JDBC específico, mediante un objeto Connection. El driver JDBC
provee acceso a la DB. Si la conexión no se puede establecer, se
dispara una excepción SQL.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-8

Esquema de uso de JDBC en aplicaciones Java

Una Aplicación Java puede establecer una conexión a una Base de Datos, por medio de:

DriverManager: Clase encargada de crear objetos de tipo Connection a partir de la


carga previa de un driver JDBC

DataSource: Una fuente de datos que reside normalmente en un servidor de


aplicaciones, y actúa como middleware, contiene la configuración de las fuentes de
datos de las cuales se creará un objeto de tipo Connection.

La clase Connection es la más importante y la encargada de la ejecución de sentencias


utilizado el driver JDBC, manejo de transacciones, niveles de aislamiento, etc..

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-8
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Pasos para el uso de JDBC para la ejecución de


comandos SQL
Cargar/Registrar
Cargar/Registrar
Class.forName(“driver”); 1
el
el Driver
Driver JDBC
JDBC

Obtener
Obtener
DriverManager.getConnection(url,user,pwd); 2
la
la Conexión
Conexión

conn.createStatement();
conn.prepareStatement(sql); Crear
Crear
3
el
el Comando
Comando
conn.prepareCall(sql);

stmt.executeQuery(); Ejecutar
Ejecutar
4
stmt.executeUpdate(); el
el Comando
Comando
(select)

(create,alter,drop) DDL Procesar


Procesar
4.1
(insert,update,delete) DML los
los Resultados
Resultados

stmt.close();
Liberar
Liberar Recursos
Recursos 5
conn.close();
Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-9

Pasos para el uso de JDBC para la ejecución de comandos SQL

1. Cargar y registra el driver


Se manipula a nivel de memoria la clase java.sql.DriverManager

2. Obtener la Conexión
Se obtiene una instancia de tipo java.sql.Connection mediante el DriverManager

3. Crear el Comando
Desde una instancia de Connection se pueden crear:
- Comandos Estáticos (java.sql.Statement)
- Comandos Dinámicos (java.sql.PreparedStatement)
- Llamadas a Procedimientos Almacenados (java.sql.CallableStatement)

4. Ejecutar el Comando
Existen dos modos básicos de ejecución de comando
- executeQuery para comandos Select
- executeUpdate para comando DDL y DML de actualización
4.1 Procesar los Resultados
Sólo en caso de la ejecución de una consulta de selección, los resultados son
manipulados a través de una instancia de java.sql.ResultSet, el cual brinda
soporte para recorrido sobre registros.

5. Liberar Recursos
La llamada al método close() de una conexión o de un comando, marca las
instancias para su eliminación de memoria por el Recolector de basura.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-9
Professional Java Developer Escuela de Postgrado y Estudios Continuos

La clase java.sql.DriverManager

• Provee servicios para administrar un conjunto de drivers JDBC.

• Permite localizar un JDBC driver cargado en memoria (mediante el método


Class.forName()) y devolver una conexión a la bd dada por la url.

• Se usa el método getConnection(url, usuario, contraseña) para obtener una


conexión a la bd, con lo cual se debe conocer su url JDBC, usuario y
contraseña.

• DriverManager es una clase (no una interface) que viene con la API, con lo
cual, un proveedor de bd no puede optimizar esta clase.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-10

La clase java.sql.DriverManager

Características

•Lleva el control de los gestores JDBC disponibles


•Es posible que existan varios dentro del sistema
•Por defecto, carga todos los disponibles en jdbc.drivers
•El gestor cargado debería registrarse con el método registerDriver

java.sql.Driver

Gestor de información y configuración general que se carga durante la inicialización


mediante:
DriverManager.registerDriver
Class.forName
Se le pedirá información a lo largo del programa, residirá en memoria, dentro sus métodos
más importantes: connect y getPropertyInfo.

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-10
Professional Java Developer Escuela de Postgrado y Estudios Continuos

1. Cargar/Registrar el Driver JDBC

• Instrucciones para la carga del driver

1. Class.forName(“NOMBRE_DRIVER”);

2. DriverManager.registerDriver(INSTANCIA_DEL_DRIVER);

• Registrar el driver cuando se carga la aplicación

3. java –Djdbc.drivers = NOMBRE_DRIVER <clase>

• El driver es cargado a memoria y la clase DriverManager lo gestiona

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-11

Cargar/Registra el Driver JDBC

1.El método forName se utiliza para cargar clases por reflexión, de forma indirecta

2. Un método de registro directo

3. Usando las opciones de la Máquina Virtual de Java, Permite Cambiar de driver sin
recompilar

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-11
Professional Java Developer Escuela de Postgrado y Estudios Continuos

2. Obtener la Conexión

• Un objeto java.sql.Connection representa una conexión con una Base de Datos.


Sobre una conexión pueden ser ejecutadas sentencias SQL y obtenerse resultados.

• La clase DriverManager provee el método sobrecargado getConnection, que


requiere la URL JDBC para especificar los detalles de la conexión.

• Una base de datos en JDBC es identificada por una URL (Uniform Resource
Locator). Especifica el nombre y la ubicación de la BD. La sintáxis recomendada
para la URL JDBC es la siguiente:

jdbc:<subprotocolo>:<subnombre>

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-12
Estableciendo una Conexión

java.sql.Connection
Puntero a la base de datos que proporciona el contexto de trabajo para los objetos
Statement y ResultSet. Soporta propiedades de transacción: setAutoCommit, commit y
rollback

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-12
Professional Java Developer Escuela de Postgrado y Estudios Continuos

3 y 4 Crear y Ejecutar el Comando


• java.sql.Statement
– se utiliza el método createStatement de una instancia Connection para su creación.
– Permite la ejecución de una sentencia SQL, sus métodos principales son:
executeQuery
• Sentencias SELECT que devuelve un java.sql.ResultSet
executeUpdate
• Sentencias INSERT, DELETE, UPDATE, CREATE, que devuelve un entero
execute
• Sentencias desconocidas en tiempo de compilación o sentencias que devuelven
resultados complejos, devuelve true/false.

• java.sql.PeparedStatement
– se utiliza el método prepareStatement de una instancia Connection para su creación.
– Extiende Statement para añadir sentencias precompiladas SQL, que compila la sentencia
SQL la primera vez. estas son llamadas más de una vez en el programa.
– Soporta parámetros de entrada: setInt, setFloat, setLong, setString

• java.sql.CallableStatement
– se utiliza el método prepareCall de una instancia Connection para su creación.
– Extiende la funcionalidad de PreparedStatement, permite la invocación de procedimientos
almacenados, si el manejador los soporta.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-13

Obtener los Datos de una Consulta de Selección

Creando y ejecutando una sentencia estática de selección

Creando una sentencia dinámica de selección

Creando una llamada a un Procedimiento Almacenado que contiene una sentencia


de selección

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-13
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Creando y ejecutando una sentencia estática de actualización

Creando y ejecutando una sentencia dinámica de actualización

Creando y ejecutando una procedimiento almacenado que contiene una sentencia


de actualización

Creando y ejecutando una procedimiento almacenado que contiene una sentencia


de actualización y que declara parámetros de retorno

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-14
Professional Java Developer Escuela de Postgrado y Estudios Continuos

4.1 Procesar los Resultados

java.sql.ResultSet
– Contiene los datos resultado de una sentencia SQL que
se recuperan secuencialmente en filas
– El método next() sirve para avanzar una fila
– Se puede acceder a los datos de las columnas en
cualquier orden por índice de posición o nombre del
campo
– Provee métodos para recuperar los datos de un campo:
getString, getFloat, getInt, etc.
– El método wasNull() indica si el campo contiene valores
nulos.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-15

4.1 Procesar los Resultados

Recuperación de Datos de una instancia de ResultSet

Recuperación de Datos de una instancia de ResultSet verificando valores nulos

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-15
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Tipos comunes de SQL y métodos de recuperación

SQL Type Java Method

BIGINT getLong()

BINARY getBytes()

BIT getBoolean()

CHAR getString()

DATE getDate()

DECIMAL getBigDecimal()

DOUBLE getDouble()

FLOAT getDouble()

INTEGER getInt()

LONGVARBINARY getBytes()

LONGVARCHAR getString()

NUMERIC getBigDecimal()

OTHER getObject()

REAL getFloat()

SMALLINT getShort()

TIME getTime()

TIMESTAMP getTimestamp()

TINYINT getByte()

VARBINARY getBytes()

VARCHAR getString()

Tipos de SQL3 y método de recuperación

SQL Type Java Method

ARRAY getArray()

BLOB getBlob()

CLOB getClob()

DISTINCT getUnderlyingType()

REF getRef()

STRUCT (castToStruct)getObject()

(castToObjectType)getObject(
JAVA_OBJECT )

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-16
Professional Java Developer Escuela de Postgrado y Estudios Continuos

5. Liberar Recursos

• Las clases:
– Connection
– Statement, PreparedStatement,CallableStatement
– ResultSet
proveen el método close(), que activa la realización de la
instancia específica, que liberan todos los recursos JDBC que
se ejecutan sobre el servidor de datos.

• Cuando se invoca el método close() de un Statement, los


ResultSet asociados son cerrados automáticamente.

• La invocación al método close() de Connection, puede provocar


un SQLException si esta ya está cerrada.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-17

5. Liberar Recursos

Cuando una Excepción es lanzada los recursos pueden estar ya creados, por tanto, se
pueden escribir el siguiente código, para asegurarnos de liberar siempre los recursos
utilizados:

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-17
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Resumen

• La clase DriverManager provee acceso a drivers JDBC registrados y permite


obtener conexiones (Connection) a una fuente de datos con el método
getConnection.

• La clase Connection representa una sesión sobre una base de datos y es


usada para crear Comandos (Statement).

• La clase Statement y sus derivados permiten la ejecución de comandos SQL


ya sean DDL o DML, tanto para la recuperación y actualización de datos.

• La clase ResultSet contiene los datos resultantes de una consulta de


selección, mantiene el cursor a una fila de datos. El método next permite
desplazarse a la siguiente fila. Los métodos getXXX retornan el valor de las
columnas de la fila actual, dado un índice o un nombre.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-18

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-18
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Práctica

Objetivo

– Escribir y Ejecutar una simple aplicación en Java que acceda


a una base de datos relacional.

Copyright © 2005, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martí
Martínez 17-
17-19

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-19
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Practica 17: Acceso a datos con JDBC

Objetivo
• Implementar una aplicación en Java que maneje la persistencia de datos sobre una
base de datos relacional

Ejercicio
1. Del esquema mostrado (tablas vs. clases) implementar las clases que implementen el
acceso a datos para el caso de Gestión Académica.

Esquema de Tablas en SQL Server 2000

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-20
Professional Java Developer Escuela de Postgrado y Estudios Continuos

Practica 17: Acceso a datos con JDBC

Diagrama de Clases de Gestión Académica

Recuperació
Recuperación y actualizació
actualización de datos con JDBC 17-
17-21

S-ar putea să vă placă și