Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Docentes:
Jesús Maudes
Raúl Marticorena
Mario Martínez
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Objetivos
●
Conocer una API básica de conexión a bases de datos.
●
Practicar con el tipo de conexión vía JNDI.
●
Conocer y practicar con los pool de conexiones.
●
Comprender la problemática de la discordancia de tipos (impedance
missmatch) entre bases de datos relaciones.
●
Trabajar con sentencias preparadas para evitar inyecciones SQL y
optimizar el rendimiento de las aplicaciones.
●
Comprender y utilizar cachés de sentencias asociadas al pool.
●
Programar transacciones de forma óptima, manejar correctamente las
excepciones y la liberación de recursos utilizados por la transacción.
●
Combinar la programación en el lado cliente con llamadas a
procedimientos almacenados.
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Introducción a JDBC
ar
70
-
7. j
4 4 .jar
. db2 jc c
-l 8
bc
sq ojd
r e i n .ja r.jar
t g -5 .1.5-b
o s n e c tor-jav a
p con
sq mysql-
ljd
bc
. ja
r
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Introducción a JDBC
Las aplicaciones no
dependen del Driver
java.sql
javax.sql
ojdbc.sql
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Oracle
Oraclethin
thin(tipo
(tipo4)4)Cliente
ClienteooServidor
Servidor
Oracle OCI (tipo 2)
Oracle OCI (tipo 2)
Oracle
OracleKPRB
KPRB(driver
(driverinterno
internotipo
tipo2)
2)
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
java.sql.DriveManager
javax.sql.DataSource
● DriveManager
– Simple pero en desuso
– Históricamente relevante
● DataSource
– Más eficiente para aplicaciones con múltiples
conexiones (Pool de conexiones)
– Sencillez de configuración (Parámetros de la
conexión)
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Pool de conexiones
● Gestión de conexiones concurrentes a la BBDD
● Ventajas
– Reutilización de conexiones
– Velocidad apertura/cierra
● Conexión física
● Conexión lógica
● Implementación Oracle → UCP
– PoolDataSource
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
Cadenas de conexión
● URL con información sobre la conexión
“jdbc:oracle:thin:hr/hr@localhost:1521:xe”
– Protocolo de la URL
– Driver utilizado
– Tipo de driver utilizado
– Usuario y contraseña para la conexión
– Host y puerto al que conectar
– Instancia de la BBDD
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
import javax.sql.DataSource;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
//Configurar el pool
pds.setURL(“jdbc:oracle:thin:hr/hr@localhost:1521:xe”);
pds.setMinPoolSize(3);
pds.setMaxPoolSize(10);
pds.setInitialPoolSize(5);
pds.setTimetoLiveConnectionTimeOut(1800);
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
import javax.sql.DataSource;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
//Configurar el pool
pds.setURL(“jdbc:oracle:thin:hr/hr@localhost:1521:xe”);
pds.setMinPoolSize(3);
pds.setMaxPoolSize(10); Poca portabilidad a
pds.setInitialPoolSize(5); otro SGBD
Pds.setTimetoLiveConnectionTimeOut(1800);
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Conexión mediante un
Pool de conexiones
Ucp.jar
● Instanciar PoolDataSource.
PoolDataSource pds = PoolDataSource.getPoolDataSource();
ojdbc6.jar
● Especificar la fábrica.
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
try {
PoolDataSource pds = PoolDataSourceFactory.getPoolDatasource();
pds.setConnectionFactoryClassName(“oracle,jdbc,pool.OracleDataSource”);
//Configurar el pool
pds.setURL(“jdbc:oracle:thin:hr/hr@localhost:1521:xe”);
pds.setMinPoolSize(3); pds.setMaxPoolSize(10);
pds.setInitialPoolSize(5);pds.setTimetoLiveConnectionTimeOut(1800);
try {
Connection conn = pds.getConnection();
//Configurar la conexión
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.READ_COMMITTED);
… //Operaciones DML(SELECT, INSERT etc ...)
conn.close();
} catch (SQLException e) { … }
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Qué es JNDI
● Java Naming and Directory Interface
● API de Java que provee servicios de directorio
– i.e. DNS, ActiveDirectory
● Acceso a recursos en base a nombres
● Información organizada en contextos
– Estructura independiente
– Mantiene información sobre un entorno
– Con un nombre asignado (bind)
– Accesible mediante su nombre (lookup)
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Implementar Singleton
conn.setAutoCommit(false);
conn.setTransactionIsolation(
Connection.TRANSACTION_READ_COMMITTED);
//Connection.TRANSACTION_SERIALIZABLE);
return conn;
}
Aplicaciones de Bases de Datos
Grado en Ingeniería Informática
Licencia
Autores:
Jesús Maudes & Raúl Marticorena & Mario Martínez
Área de Lenguajes y Sistemas Informáticos
Departamento de Ingeniería Informática
Escuela Politécnica Superior
UNIVERSIDAD DE BURGOS
Este obra está bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.
No se permite un uso comercial de esta obra ni de las posibles obras derivadas, la distribución de las cuales se debe
hacer con una licencia igual a la que regula esta obra original