Escolar Documentos
Profissional Documentos
Cultura Documentos
Acerca de:
En la compilacin de esta obra se utilizaron libros conocidos en el
ambiente Java, grficas, esquemas, figuras de sitios de internet,
conocimiento adquirido en los cursos oficiales de la tecnologa Java. En
ningn momento se intenta violar los derechos de autor tomando en
cuenta que el conocimiento es universal y por lo tanto se puede
desarrollar una idea a partir de otra.
La intencin de publicar este material en la red es compartir el esfuerzo
realizado y que otras personas puedan usar y tomar como base el
material aqu presentado para crear y desarrollar un material mucho ms
completo que pueda servir para divulgar el conocimiento.
CONTENIDO
Modulo 01: Introduccin al JDBC.
Curso JDBC.
Modulo 01
Introduccin al JDBC.
Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Contenido.
Introduccin.
Evolucin de JDBC.
Arquitectura del API JDBC.
Descripcin general del API JDBC.
Drivers JDBC.
Qu necesitamos para trabajar con JDBC?.
Conexin de la Base de Datos.
Conexin a JDBC.
Cargar el controlador JDBC.
Establecer una conexin JDBC.
TestConexion.java
Creacin de sentencias.
7
Contenido.
Objetos Statement.
Sentencia executeUpdate().
Insertar.java
Sentencia executeQuery()
Consultar.java
Tipos de Datos y Conversiones.
ResultSetMetaData.
TestResultSetMetaData.java
DatabaseMetaData.
TestMetaData.java
Introduccin.
JDBC es un conjunto de clases e interfaces Java que permiten la
manipulacin de sentencias SQL de una fuente de datos (base de
datos).
La interface Java (API de JDBC) proporciona a las aplicaciones Java
un mecanismo estndar e independiente de la plataforma para el
acceso a la mayora de las bases de datos existentes.
La API de JDBC define un conjunto de clases e interfaces que
proporcionan toda la funcionalidad que el acceso a base de datos
requiere, tal como la ejecucin de consultas SQL o el tratamiento
de los resultados.
Cada fabricante de base de datos se encargar de proporcionar un
driver JDBC especfico para su base de datos.
Introduccin.
Las actividades bsicas de programacin que vamos a utilizar en
JDBC:
1
Componentes JDBC.
El producto JDBC incluye 4 componentes:
Java Standard Edition (Java SE)
java.sql
javax.sql
El API de
JDBC
JDBC Driver
Manager
JDBC Test
Suite
Puente
JDBC-OBDC
11
Conexin
Connection
DatabaseMetaData
Statement
Comandos
CallableStatement
PreparedStatement
Resultados
ResultSet
ResultSetMetaData
13
Driver
JDBC-ODBC
API
JDBC
Se conecta a la
base de datos
Driver
JDBC
Traduce cdigo Java
en llamadas ODBC
14
Driver
JDBC
Cdigo Java
y Nativo
Cliente
Nativo
Librera nativa especifica del
proveedor de base de datos
15
Cliente JDBC
Driver
JDBC
TCP/IP
Servidor de
acceso a bd
Servidor JDBC
Driver
Tipo 1/2
Protocolo especfico
del proveedor
16
Es la mejor solucin y
est escrito totalmente
en Java (100%)
Driver
JDBC
Cdigo Java 100%
17
DriverManager
Crea una conexin nueva.
Proporciona el servicio
bsico para manejar
conjunto de drivers JDBC.
Requiere que la aplicacin
cargue el driver usando
una URL va hardcode.
Connection: representa una
conexin a la BD. Es creada por
via directa (DriverManager) o
utilizando DataSource.
getConnection()
Connection
Driver
JDBC
DataSource
Toma una conexin del pool.
Abstrae los detalles de
acceso y configuracin. Es
el mtodo preferido de
acceso en JEE.
DriverManager.getConnection
(url,usr,pwd);
Obtener la
conexin
conn.createStatement();
conn.prepareStatement(sql);
conn.prepareCall(sql);
Crear el comando
SQL
Ejecutar el
comando SQL
Class.forName(driver);
stmt.executeQuery();
stmt.executeUpdate();
(select)
stmt.close();
conn.close();
Liberar recursos
Procesar los
resultados
4.1
5
19
Class.forName("NombreDelDriver" );
20
21
Obtener la conexin.
Para conectarnos a la base de datos una vez cargado el driver,
utilizaremos el mtodo getConnection que a su vez define una URL
que indicar la ubicacin de la base de datos:
Usuario para acceder
a la base de datos
Clave de
acceso
jdbc:<subprotocolo>:<subnombre>
Es el
protocolo
Identifica el driver
de la bd
22
Obtener la conexin.
Por ejemplo para establecer una conexin con MS Access
podriamos escribir:
Connection conn;
String url = "jdbc:objc:NombreBaseDatos";
conn = DriverManager.getConnection(url, "", "");
23
Obtener la conexin.
Ejemplo:
package cursojdbc;
import java.sql.*;
Carga el driver en
memoria e intenta
realizar la conexin
a la bd.
1/2
24
Obtener la conexin.
Ejemplo:
if (conn != null) {
System.out.println("Conexin a la bd " + url + "....ok!!");
conn.close();
}
} catch (ClassNotFoundException cnfe) {
Si se logra la
System.out.println("Driver JDBC no encontrado");
conexin se
cnfe.printStackTrace();
despliega un
} catch (SQLException sqle) {
mensaje de
System.out.println("Error al conectarse a la BD");
usuario.
sqle.printStackTrace();
En caso
} catch (Exception e) {
contrario
System.out.println("Error general");
lanza una
e.printStackTrace();
excepcin.
}
2/2
25
executeQuery
Observa el uso
de las comillas
simples.
package cursojdbc;
import java.sql.*;
public class TestExecuteUpdate {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public TestExecuteUpdate() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}
1/2
28
}
public static void main(String[] args) {
try {
TestExecuteUpdate test = new TestExecuteUpdate();
test.operacionesBD();
} catch (SQLException sqle) {
System.out.println(sqle);
} catch (Exception e) {
System.out.println(e);
}
1/2
30
AutorID
Nombre
Apellido
Harvey
Deitel
Paul
Deitel
Jackie
Barker
Paul
Sanghera
Ivor
Horntons
Todd
M.Thomas
31
Depende del objeto consulta: cada vez que se realice una consulta
se pierden los resultados.
32
33
package cursojdbc;
import java.sql.*;
public class TestExecuteQuery {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public TestExecuteQuery() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}
1/2
34
while(rs.next()) {
System.out.print("Autor ID: " + rs.getString(1));
System.out.print("\tNombre: " + rs.getString(2));
System.out.print("\t" + rs.getString(3) + "\n");
}
rs.close();
Utilizando los mtodos getXXX obtiene los
stmt.close();
valores de las columnas en el ResultSet. Se
conn.close();
obtiene por el nombre de las columnas o por
su posicin.
1/2
35
1/2
36
37
Tipos Java
Tipos JDBC
Tipos Java
BIGINT
getLong()
LONGVARCHAR
getString()
BINARY
getBytes()
NUMERIC
getBigDecimal()
BIT
getBoolean()
OTHER
getObject()
CHAR
getString()
REAL
getFloat()
DATE
getDate()
SMALLINT
getShort()
DECIMAL
getBigDecimal()
TIME
getTime()
DOUBLE
getDouble()
DATESTAMP
getTimeStamp()
FLOAT
getDouble()
TINYINT
getByte()
INTEGER
getInt()
VARBINARY
getBytes()
LONGVARBINARY
getBytes()
VARCHAR
getString()
38
Son datos
Datos
Metadatos
DataBaseMetaData
DriverPropertyInfo
ResultSetMetaData
RowSetMetaData
ParameterMetaData
39
ResultSetMetaData.
Los mtodos de ResultSetMetaData nos permite determinar las
caractersticas de un objeto ResultSet.
Por ejemplo podemos determinar:
El nmero de columnas.
Conjunto de datos
Obtenido en un ResulSet
ResultSetMetaData.
Ejemplo:
package cursojdbc;
import java.sql.*;
public class MetaData01 {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public MetaData01() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}
1/2
41
ResultSetMetaData.
Ejemplo:
1/2
42
DatabaseMetaData.
La interface DatabaseMetaData contiene ms de 150 mtodos
para recuperar informacin de un Base de Datos (catlogos,
esquemas, tablas, tipos de tablas, columnas de las tablas,
procedimientos almacenados, vistas etc.) as como informacin
sobre algunas caractersticas del controlador JDBC que estemos
utilizando
Estos mtodos son tiles cuando se escribe aplicaciones genricas
que pueden acceder a diversas Bases de Datos.
DatabaseMetaData dbmd = conn.getMetaData();
43
DatabaseMetaData.
Ejemplo:
package cursojdbc;
import java.sql.*;
public class DBMetaData01 {
final static String bd = "MI_BIBLIOTECA";
final static String login = "root";
final static String password = "admin";
final static String url = "jdbc:mysql://localhost/" + bd;
Connection conn;
Statement stmt;
public DBMetaData01() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, login, password);
stmt = conn.createStatement();
}
1/2
44
DatabaseMetaData.
Ejemplo:
DatabaseMetaData.
Ejemplo:
Modulo 02
Prctica de Laboratorio.
47
Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Conectarse a una base de datos a travs de JDBC
Utilizar las instrucciones de JDBC para manipular las tablas de una
base de datos.
48
Prctica de Laboratorio.
Paso 1. Crear una base de datos denominada ControlEscolar y
crear cinco tablas en base a las definiciones siguientes :
Instructor
Curso
CursoId
InstructorId
INT
NombreCurso CHAR 20
INT
NombreInstructor CHAR
60
CursoEstudiante
CursoInstructor Estudiante
CursoId
INT
EstudianteId
INT
InstructorId
INT
NombreEstudiante
CHAR
60
CursoId
INT
EstudianteId
INT
49
Prctica de Laboratorio.
Paso 2. Crear una clase JDBCLab01 que contenga los mtodos
para:
a) Insertar datos en cada una de las tablas
b) Mostrar los datos del instructor y los cursos que esta
impartiendo
c) Actualizar el nombre de un instructor/estudiante/curso
Modulo 03
JDBC Avanzado.
51
Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Describir el uso de las clases heredadas de la clase Statement.
Discutir acerca de los procedimientos almacenados.
Discutir sobre el manejo de transacciones, cursores y
procesamiento de mltiples resultados.
52
Contenido.
Introduccin.
La clase PreparedStatement.
TestPreparedStatement.java
La clase CallableStatement.
Transacciones.
Niveles de aislamiento transaccional.
Excepciones JDBC.
53
Introduccin.
La especificacin JDBC provee dos clases para la programacin
sofisticada en las bases de datos: PreparedStatement y
CallableStatement.
Con PreparedStatement podemos ejecutar instrucciones SQL
precompiladas y
CallableStatement permite ejecutar los procedimientos
almacenados de las Bases de Datos.
A continuacin estudiaremos cada una de estas instrucciones.
54
La clase PreparedStatement.
El problema con Statement sucede cuando la consulta se realiza
dentro de un ciclo y vara slo en unos valores:
stmt.executeQuery(SELECT * FROM Cliente WHERE codigo = + i);
La clase PreparedStatement.
Tambin se crean a partir de la conexin:
PreparedStatement pstmt =
conexion.prepareStatement(SELECT * FROM Cliente
WHERE codigo = ?)
TestPreparedStatement.java
Statement ipStmt = conn.prepareStatement(
INSERT INTO contactos(nombre,telefono,email)
VALUES(?,?,?));
Parmetros IN
ipStmt.setString(1,Juan);
ipStmt.setString(2,01667-7505816);
ipStmt.setString(3,juan@hotmail.com);
int i = ipStmt.executeUpdate();
void setBoolean(int paramIndex, boolean x)
La clase CallableStatement.
CallableStatement es el modo estndar de llamar procedimientos
almacenados con la sintaxis de escape SQL de procedimiento
almacenado de API JDBC.
La sintaxis de escape SQL soporta dos formas de procedimientos
almacenados. La primera forma incluye un parmetro de resultado
conocido como parmetro OUT, y la segunda forma no utiliza
parmetros OUT. Cada una de las formas puede tener parmetros
IN.
Cuando el controlador JDBC encuentra {call PROC_ALM},
traducir esta sintaxis de escape al SQL nativo utilizado en la Base
de Datos.
58
La clase CallableStatement.
La sintaxis tpica para llamar a un procedimiento almacenado es:
{call nombre_procedimiento[?,?,?]}
{? = call nombre_procedimiento[?,?,?]}
59
Transacciones.
Ejecucin de bloques de consultas SQL manteniendo las
propiedades ACID (Atomicy-Consistency-Isolation-Durability), es
decir permite garantizar integridad ante fallas y concurrencia de
transacciones
Atomicy: Las operaciones en ella incluida deben ser realizadas
todas en grupo o ninguna.
Consistency: La Base de Datos ha de quedar en un estado que
no viole la integridad de la misma.
Isolation: La lgica debe poder proceder.
Duradero: Si tiene xito la transaccin, las operaciones sern o
pasarn a un estado persistente en la Base de Datos.
60
Transacciones.
Una transaccin que termina exitosamente se compromete
(commit).
Una transaccin que no termina exitosamente se aborta (rollback).
En JDBC por omisin cada sentencia SQL se compromete tan
pronto se ejecuta, es decir una conexin funciona por defecto en
modo auto commit.
Para ejecutar varias sentencias SQL en una misma transaccin es
preciso: deshabilitar el modo autocommit, luego ejecutar las
instrucciones SQL, y terminar con commit si todo va bien o rollback
en otro caso.
61
Transacciones.
Mtodos frecuentemente usados:
void setAutoCommit(boolean b)
boolean getAutoCommit()
void commit()
void rollback()
62
Excepciones JDBC.
La mayor parte de las operaciones que nos proporciona el API JDBC
lanzarn la excepcin java.sql.SQLException en caso de que se
produzca algn error a la base de datos (por ejemplo: errores en la
conexin, sentencias SQL incorrectas, falta de privilegios, etc.).
Por este motivo es necesario dar un tratamiento adecuado a estas
excepciones y encerrar todo el cdigo JDBC entre bloques
try/catch. Por ejemplo:
try {
Informacin al usuario de los errores
que se han producido.
}
catch(SQLException sqle) {
System.out.println(SQLException: + sqle.getMessage());
sqle.printStackTrace();
}
64
Excepciones JDBC.
Object
Trata las excepciones que
se producen al manipular
la BD
Throwable
Error
Cuando ocurre un error en los
procesos por lotes
Exception
SQLException
BatchUpdateException
Cuando ocurre perdida de
informacin ya sea en la operacin
de lectura o escritura
Avisos que se
producen al
manipular y
realizar
operaciones
sobre la BD
SQLWarning
DataTruncation
65
Modulo 04
Prctica de Laboratorio.
66
Objetivos.
Despus de completar este modulo, el participante ser capaz de:
Escribir cdigo Java para crear procedimientos almacenados.
Escribir cdigo Java para utilizar procedimientos almacenados.
Explicar como funciona el manejo de las transacciones.
67
Prctica de Laboratorio.
Paso 1. Crear una base de datos denominada Inventario y crear las
tablas en base a las definiciones siguientes:
Proveedor
Producto
ProductoId
INT
NombreProducto
VARCHAR
200
PrecioProducto
FLOAT
ColorProducto
CHAR
10
ProveedorId
INT
NombreProveedor
VARCHA 100
R
RegionProveedor
CHAR
50
DescripcionProveedor
CHAR
250
Producto_Proveedor
ProductoId
INT
ProveedorId
INT
Cantidad
INT
4
68
Prctica de Laboratorio.
Paso 2. Escribir un programa en Java que cree un procedimiento
almacenado para recuperar todos los datos de la tabla
Producto_Proveedores dado el id de un proveedor.
Paso 3. Escribir cdigo Java que llame a ese procedimiento
almacenado y despliegue los datos utilizando un ResultSet.
Paso 4. Escribir un programa completo en Java que utilice
sentencias precompiladas (prepareStatements) para las
operaciones de la Base de Datos.
69
Introduccin.
JDBC es una API de Java para ejecutar sentencias SQL; es una
especificacin formada por un conjunto de clases abstractas e
interfaces que deben implementar todos los fabricantes del
controlador JDBC.
El driver desarrollado por el fabricante es el que hace de
intermediario entre JDBC y las aplicaciones que acceden a las bases
de datos.
Aplicacin
JDBC
Driver
BD
Introduccin.
La idea principal de la API de JDBC es que el programador codifique
sus programas abstrayndose de los detalles de implementacin y
configuracin del Sistema Manejador de Base de Datos.
Con la API de JDBC el programador puede:
71
Evolucin de JDBC.
Versin
Incorporado en
Nombre del
paquete
Contenido
JDBC 1.0
JDK 1.1
java.sql
JDBC 2.0
Core API
JDK 1.2 y
posterior
java.sql
JDBC 2.0
Optional
API
J2EE y
posteriores
javax.sql
JDBC 2.1
Optional
API
No incorporado
javax.sql
JDBC 3.0
Core API
JDK 1.4 y
posteriores
java.sql
JDBC 4.0
JDK 1.6 y
posteriores
java.sql
GRANT SELECT,INSERT,UPDATE,DELETE
ON AGENDA.* TO curso'@'localhost'
IDENTIFIED BY curso';
73
Conexin a JDBC.
Una vez que tenemos creada la Base de Datos AGENDA con su
respectiva tabla contactos el siguiente paso es establecer una
conexin. Para ello tenemos dos vertientes:
Conexin directa:
Esta alternativa establece una conexin directa a la base de datos
y solo se recomienda si no existe otra opcin.
74
Conexin a JDBC.
En este curso utilizaremos la conexin directa para trabajar con
JDBC.
Las siguientes instrucciones son vlidas para el IDE Eclipse:
Es necesario aadir el JAR del driver a nuestro proyecto en eclipse,
para eso:
Men Project / Properties / Java Build Path.
Add external Jars.
Conexin a JDBC.
Una vez que tenemos creada la Base de Datos AGENDA con su
respectiva tabla contactos el siguiente paso es establecer una
conexin. Para ello tenemos dos vertientes:
Conexin directa:
Esta alternativa establece una conexin directa a la base de datos
y solo se recomienda si no existe otra opcin.
76
MySQL
Driver: com.mysql.jdbc.Driver
Formato url: jdbc://hostname/databaseName
Oracle
Driver: oracle.jdbc.driver.OracleDriver
Formato url:
jdbc:oracle:thin@hostname:portnumber:databaseName
DB2
Driver: com.ibm.db2.jdbc.net.DB2Driver
Formato url:
jdbc:db2:hostname:portnumber/databaseName
Access
Driver: com.jdbc.odbc.jdbc.OdbcDriver
Formato url: jdbc.odbc.databaseName
77
78
jdbc:<subprotocolo>:<subnombre>
Es el
Identifica el driver Indica el nombre y en donde
protocolo
de la BD
se encuentra la BD
79
80
81
TestConexion.java
import java.sql.*;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =
DriverManager.getConnection(url,login,password);
conn.close();
}
catch {
Cierra la conexin
Crea la conexin
Statement
<<Singleton>>
DriverManager
<<Interface>>
Connection
PreparedStatement
<<Interface>>
<<Interface>>
<<Interface>>
DatabaseMetaData
<<Interface>>
<<Interface>>
ResultSetMetaData
Conexin
CallableStatement
Comandos
ResultSet
Resultados
83
Creacin de sentencias.
Ya que establecimos la conexin con la Base de Datos podemos
realizar lo siguiente:
Crear objetos de tipo Statement, PreparedStatement y
CallableStatement
Obtener informacin con los objetos DatabaseMetadata
Controlar las transacciones va commit() y rollback()
Delimitar el nivel al que queremos manejar las transacciones
84
Objetos Statement.
Los objetos de tipo Statement son creados a partir de una
conexin existente utilizando el mtodo createStatement(). La
sintaxis es:
Statement stmt = conn.createStatement();
85
Creacin de sentencias.
executeQuery
ResultSet
Statements
getMoreResults
execute
commit,abort
prepareStatement
getXXX
PreparedStatement
getXXX
Connection
getConnection
CallableStatement
DriverManager
86
ResultSetMetaData.
Algunos mtodos para ResultSetMetaData:
Nombre del mtodo
Valor R
Descripcin
getColumnCount()
int
getColumnLabel(int column)
String
getColumnName(int column)
String
getColumnType(int column)
String
getColumnTypeName(int column)
String
getTableName(int column)
String
87
Instalar JDK.
Instalar el
driver.
Instalar el
SMBD.
89
Arrancar
NetBeans.
90
Crear el
proyecto Java
Clic en
Next
91
Nombre y
ubicacin del
proyecto
Clic en
Finish
92
Nombre y
ubicacin del
proyecto
Estoy listo
para
programar!
93
94
Localizar y clic
en la pestaa
Services.
Clic en
Databases
95
Clic derecho
del ratn en
Java DB.
Clic
derecho
Clic
Clic en OK
96
Seleccionar
la BD
CoffeeBreak.
Clic
derecho
Clic
97
Seleccionar
la BD
CoffeeBreak.
Clic
derecho
Clic
Aqu vamos a
crear el script
98
Crear el
Script SQL.
Clic en el
botn Run
SQL.
Tablas
99
100
Arrancar
NetBeans.
Seleccionar la ruta
Clic
C:\Archivos de Programa\Sun\JavaDB\lib\derby.jar
Clic
Clic
102
Crear una
clase Java.
103
Clic
Clic
Una vez que damos clic en el botn Finish en la pantalla principal de la IDE nos
aparecer el editor de texto con la definicin de la clase TestConexion.
104
package cursojdbc;
import java.sql.*;
public class TestConexion {
public static void main(String[] args) {
//El cdigo va aqu
}
}
En el editor de cdigo.
105
Escribir el
cdigo
restante.
106
2 de 2
108