Presentación guía sencilla en Microsoft Excel.pptx
Bases de Datos en Java - Intro a JDBC
1. Bases de Datos en JAVA
Introducción a JDBC
Carlos Hernando Carasol
chernando@acm.org
10 de Mayo de 2011
2. Índice de contenidos
Motivación del uso de Bases de Datos
Introducción a JDBC
Conexiones
Ejecución de sentencias SQL
Secuencias especiales
Transacciones
4. Enterprise Edition
Tratamiento de mayor cantidad de datos
Optimización para almacenamiento
Optimización para recuperación
Optimización para manipulación
Arquitectura Cliente / Servidor
Concentrar la lógica de negocio
Data independence
7. Tipos de Drivers JDBC
Type 1: JDBC-ODBC Bridge driver
(Bridge)
Type 2: Native-API/partly Java driver
(Native)
Type 3: AllJava/Net-protocol driver
(Middleware)
Type 4: All Java/Native-protocol driver
(Pure)
10. Cargando el Driver a mano
Necesario en versiones antiguas
Hay que cargar el driver a mano:
Class.forName(“nombre del driver”)
11. DriverManager
This fully implemented class connects an
application to a data source, which is
specif ed by a database URL. When this
i
class f rst attempts to establish a
i
connection, it automatically loads any JDBC
4.0 drivers found within the class path. Note
that your application must manually load any
JDBC drivers prior to version 4.0.
13. Definición de origen de datos
jdbc:mysql://localhost:3306/test?opcion=1
jdbc:
mysql: dialecto
localhost: dirección o IP del servidor
test: nombre de la base de datos
opicion=1: opciones adicionales
14. DataSource
This interface is preferred over
DriverManager because it allows details
about the underlying data source to be
transparent to your application. A
DataSource object's properties are set so
that it represents a particular data source.
15. Ejemplo de DataSource
ctx = new InitialContext();
DataSource ds =
(DataSource)ctx.lookup("jdbc/fastCoffeeDB"
);
Connection con = ds.getConnection(
"myLogin",
"myPassword");
17. Ejercicio
Establecer conexión con la base de datos
Probar los diferentes errores
Usuario/contraseña incorrecto
Base de datos incorrecto
Servidor/puerto incorrecto
Sin el driver disponible
…
20. Tipos de Statement
Para consultas: executeQuery
Para modif caciones: executeUpdate
i
Para ambos: execute
Especiales
Llamadas a procedimientos almacenados
Prepared statement
Batch
23. Ejercicio
Conectarse a la base de datos de sakila
Seleccionar todos los paises de la tabla
country
Por cada f la devuelta imprimir por salida
i
estándar números consecutivos
24. ResultSet
Devuelve todas las f las seleccionadas
i
Desconoce el número de columnas y
contenido hasta la ejecución
25. ResultSet MetaData
ResulSetMetaData
ResultSetMetaData rsm = rs.getMetaData();
for (int i = 1; i < rsm.getColumnCount() +
1; i++) {
System.out.println(rsm.getColumnName(i));
System.out.println(rsm.getColumnTypeName(i
));
}
27. Obtener campos
Normalmente sabremos los datos que
queremos obtener de la base de datos
Utilizamos:
GetTipo(nombre)
GetTipo(posicion)
Tipo es en tipo Java.
28. Ejercicio
Mostrar todas las f las con el formato:
i
ID: valor
Atributo1: valor1; Atributo2: valor2...
de la tabla “actor”
29. Tipos de datos
CHAR String BINARY byte[]
VARCHAR String VARBINARY byte[]
LONGVARCHAR String LONGVARBINARY byte[]
NUMERIC java.math.BigDecimal DATE java.sql.Date
DECIMAL java.math.BigDecimal TIME java.sql.Time
BIT boolean TIMESTAMP java.sql.Timestamp
CLOB Clob
BOOLEAN boolean
BLOB Blob
TINYINT byte
ARRAY Array
SMALLINT short
DISTINCT mapping of underlying type
INTEGER int
STRUCT Struct
BIGINT long
REF Ref
REAL f oat
l DATALINK java.net.URL
FLOAT double JAVA_OBJECT underlying Java class
DOUBLE double
32. Insertar contenidos
Statement stmt = null;
try {
stmt = con.createStatement();
stmt.executeUpdate("insert into prueba …");
} catch (SQLException e) {
// TODO!
} f nally {
i
if (stmt != null) { stmt.close(); }
}
33. Ejercicio
Insertar un actor
Elegir un país de country
Cambiar todas las ciudades de city que referencien
al pais elegido por otro
Eliminar el país de country
En todas las operaciones mostrar el
número de i las afectadas
f
34. Tipos de Statement
Execute
Mezcla de los anteriores
Utilizado para consultas en tiempo de
ejecución
Devuelve un boolean
GetResultSet()
GetUpdateCount()
35. Ejercicio
Preparar una método ejecutarQuery
Si hay resultados mostrar los campos y valores
Si hay modif caciones mostrar su número
i
Ejecutar el método con
Una consulta tipo SELECT
Una tipo UPDATE
(podéis pedir la consulta por entrada estándar)
36. Prepared Statements
Se utilizan cuando vamos a ejecutar la
misma consulta varias veces
Queremos que la base de datos se
prepare y optimice la consulta
37. Ejemplo de Prepared Statements
PreparedStatement updateSales =
con.prepareStatement("update " + dbName
+ ".COFFEES " + "set TOTAL = TOTAL + ?
where COF_NAME = ?");
38. Lanzando un Prepared Statements
// Fijo los parámetros
updateSales.setInt(1, 100);
updateSales.setString(2, “Franpuchino”);
// Lanzo la consulta
updateSales.executeUpdate();
39. Ejercicio
Preparar una consulta (puede ser update)
Ejecutarla dos veces con parámetros
diferentes
57. Ejercicio
Utilizar el código del otro caso como base
Proporcionar para las entidades:
Listado
Creación y actualización de registros
Eliminar un registro
Listado de las vistas
Llamada al procedimiento
“tarea_notif cada”
i
58. Ejercicio cont.
Crear un Prepared Statement para una de
las vistas
Insertar múltiples tareas de una vez
Fijar la fecha de las tareas un día tras otro
por persona
Cambiar la ejecución de una tarea,
reasignarla a otra persona y si esa
persona ya tiene otra tarea para la misma
fecha límite cancelar toda la operación.