Professional Documents
Culture Documents
JDBC
Driver
Oracle
Driver
Sybase
Driver
DB2
MySQL
Oracle
Sybase
DB2
JDBC
Paquete java.sql
Clase DriverManager
Permite establecer y gestionar conexiones a las BD
Clase SQLPermission
Proporciona los permisos para poder usar el DriverManager a cdigo
en ejecucin dentro de un Security Manager (por ejemplo applets)
Interfaz Driver
Metodos para registrar y conectar controladores basados en
tecnologa JDBC
Clase DriverPropertyInfo
Propiedades de un controlador
Excepciones
SQLException
SQLWarning
JDBC
Paquete java.sql
Statement
Permite enviar instrucciones a la BD
PreparedStatement
Permite usar instrucciones preparadas o SQL bsicas
CallableStatement
Llamada a procedimientos almacenados en la BD
Savepoint
Puntos de recuperacin en una transaccin
ResultSetMetaData
Informacin sobre las columnas del objeto ResultSet
JDBC
Paquete java.sql
JDBC
boolean
byte
short
int
long
double
float
double
java.math.BigDecimal
java.math.BigDecimal
java.lang.String
java.lang.String
java.lang.String
java.sql.Date
java.sql.Time
byte []
byte []
JDBC
Paquete java.sql
try{
DatabaseMetaData infoBD=conexion.getMetaData();
System.out.println("Basededatos:"+infoBD.getDatabaseProductName());
System.out.println("Version:"+infoBD.getDatabaseProductVersion());
}catch(Exception ex){
//Tratarelerror
}
JDBC
Secuencia normal:
Abrir transaccin
Crear y ejecutar instrucciones
Procesar resultados
Cerrar transaccin
JDBC
Registrar un controlador
JDBC
JDBC
10
Statement
instruccion =conexion.createStatement();
Mtodos
executeQuery(String sql)
Ejecucin de consultas: SELECT
Devuelve un objeto ResultSet
executeUpdate(String sql)
Modificaciones en la BD: INSERT, UPDATE, DELETE
Devuelve el nmero de columnas afectadas
execute(String sql)
Ejecucin de instrucciones que pueden devolver varios conjuntos de
resultados
Requiere usar luego getResultSet() o getUpdateCount() para recuperar los
resultados, y getMoreResults() para ver los siguientes resultados
JDBC
11
ResultSet
JDBC
12
try{
Statement instruccion =conexion.createStatement();
String query ="SELECT*FROMclientesWHEREnombreLIKE\"Empresa%\"";
ResultSet resultados=instruccion.executeQuery(query);
System.out.println("Listadodeclientes:");
while (resultados.next()) {
System.out.println("Cliente"+resultados.getString("nif")
+",Nombre:"+resultados.getString("nombre")
+",Telfono:"+resultados.getString("telefono"));
}
}catch(Exception ex){
e.printStackTrace();
}
JDBC
13
ResultSet
JDBC
14
ResultSetMetaData
try{
Statement instruccion =conexion.createStatement();
String query ="SELECT*FROMclientes";
ResultSet resultados=instruccion.executeQuery(query);
ResultSetMetaData infoResultados =resultados.getMetaData();
int col=infoResultados.getColumnCount();
System.out.println("Estructuradelatablaclientes:");
for (int i=1;i<=col;i++){
System.out.println("Campo"+infoResultados.getColumnLabel(i)+"\t"
+"Tipo:"+infoResultados.getColumnTypeName(i));
}
}catch(Exception ex){
e.printStackTrace();
}
Juan Pavn - UCM 2012-13
JDBC
15
JDBC
16
Instrucciones preparadas
PreparedStatement
Cuando se van a ejecutar instrucciones repetidamente, se puede
precompilar en la BD y ganar eficiencia
Primero se define el modelo de instruccin preparada
PreparedStatement ps =
conexion.prepareStatement("INSERTINTOclientes VALUES(?,?,?,?)");
Cada parmetro se representan con el smbolo de interrogacin ?
Luego se puede utilizar repetidamente simplemente indicando los
parmetros con mtodos setX(posicin, valor)
El mtodo depende del tipo de parmetro
La posicin comienza en 1
executeUpdate devolver la cantidad de elementos insertados
ps.setString(1,nif);
ps.setString(2,nombre);
ps.setString(3,direccion);
ps.setString(4,email);
if(ps.executeUpdate()!=1)
thrownewException("ErrorenlaInsercin");
JDBC
17
Excepciones
SQLException
getSQLState()
Texto de SQLstate segn la convencin X/Open o SQL:2003
getErrorCode()
Cdigo de error (entero) especfico del vendedor
SQLWarning
JDBC
18
Liberar recursos
finally {
try{
if (resultados!=null){//liberarlosResultSet
resultados.close();
}
if (instruccion !=null){//liberarlosStatement
instruccion.close();
}
if (conexion !=null){//liberarlaconexinalaBD
conexion.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
Juan Pavn - UCM 2012-13
JDBC
19
Transacciones
JDBC
20
Transacciones
conexion.setAutoCommit(false)
commit()
Hace efectivos todos los cambios desde el ltimo commit/rollback
Libera los bloqueos de la BD que tuviera el objeto Connection
rollback()
Deshace todos los cambios realizados en la transaccin
Libera los bloqueos de la BD que tuviera el objeto Connection
JDBC
21
Transacciones
setTransactionIsolation(int level)
TRANSACTION_READ_UNCOMMITED
Transaccin que puede ver los cambios de otra transaccin antes de commit
Permite lecturas sucias, no repetibles y fantasmas
TRANSACTION_READ_COMMITED
La lectura de datos antes de commit no est permitida
Permite lecturas no repetibles y fantasmas
TRANSACTION_REPEATABLE_READ
Indica que se pueda leer el mismo dato sin fallar
Permite lecturas fantasmas
TRANSACTION_SERIALIZABLE
Transaccin de nivel ms alto
No permite lecturas sucias, fantasmas ni no repetibles
La ms segura pero menor rendimiento
Juan Pavn - UCM 2012-13
JDBC
22
Hibernate
JDBC
23
Bibliografa
JDBC
24