Acceso a BBDD con JDBC – Transacciones (III)

  • Si es necesario, se pueden ejecutar varias instrucciones dentro de una transacción (propiedades ACID)
    • Abrir transacción
      • Crear y ejecutar instrucciones
      • Procesar resultados
    • Cerrar transacción

En entornos multiusuario (por ejemplo, para aplicaciones web)
hay que controlar el acceso concurrente a la BD para evitar
inconsistencias
Transacción: unidad de trabajo lógica
Un conjunto de instrucciones sobre la BD
Si algo va mal, hacer marcha atrás al estado anterior
Si todo va bien, hacer efectivos los cambios
La interfaz Connection ofrece métodos para las transacciones
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 transacción
• Libera los bloqueos de la BD que tuviera el objeto Connection
Por defecto se funciona en modo autocommit
Cada instrucción sobre la BD va en su propia transacción
Es seguro pero ineficiente

 

Por defecto se funciona en modo autocommit
Cada instrucción sobre la BD va en su propia transacción
Es seguro pero ineficiente
Se desactiva con
conexion.setAutoCommit(false)
Para gestionar explícitamente las transacciones (con autocommit
false), la interfaz Connection ofrece los métodos
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 transacción
• Libera los bloqueos de la BD que tuviera el objeto Connection
Se pueden crear puntos de recuperación (savepoints)
Savepoint setSavepoint(String name)
• Permite hacer commit parciales para volver a este punto si fuera
necesario con rollback(savepoint)

 

setTransactionIsolation(int level)
Intenta establecer un nivel de aislamiento para la transacción en una
conexión
Dependerá de lo que se haga que se elige un nivel u otro para evitar
problemas y permitir la mayor eficiencia
• TRANSACTION_NONE
Otras transacciones no soportadas
• TRANSACTION_READ_UNCOMMITED
Transacción que puede ver los cambios de otra transacción 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
Transacción de nivel más alto
No permite lecturas sucias, fantasmas ni no repetibles
La más segura pero menor rendimiento