Transacciones y procesamiento por lotes

Consultas a una base de datos PostgreSQL en Java

Miller Trujillo

Staff Software Engineer

¿Cuál es el problema?

  • Transacción: una red de seguridad para operaciones de base de datos
  • Todas las operaciones tienen éxito o fallan juntas

$$

$$

Ejemplo de transacción de transferencia bancaria

Consultas a una base de datos PostgreSQL en Java

Las propiedades ACID

  • Atomicidad: las operaciones se completan o no se aplican
  • Consistencia: la base de datos se mantiene válida
  • Isolación: evita interferencias entre operaciones
  • Durabilidad: las transacciones completadas persisten

Propiedades ACID

  • Por defecto, JDBC funciona en modo auto-commit 🔄
Consultas a una base de datos PostgreSQL en Java

Control de transacciones en JDBC

Connection conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD)
conn.setAutoCommit(false);

try (...) { // Ejecuta tus sentencias SQL aquí
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Consultas a una base de datos PostgreSQL en Java

Ejemplo de transferencia bancaria

// Reducir el saldo del remitente
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Aumentar el saldo del destinatario String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - modifica filas existentes en una tabla
  • SET - especifica qué columnas cambiar
Consultas a una base de datos PostgreSQL en Java

Ejemplo de transferencia bancaria

try (Connection conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD)) {

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Establecer parámetros y ejecutar ambas sentencias... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Consultas a una base de datos PostgreSQL en Java

Procesamiento por lotes

  • Agrupa múltiples operaciones

$$

Captura de pantalla 2025-12-03 a las 10.40.25.png

Consultas a una base de datos PostgreSQL en Java

Ejemplo de procesamiento por lotes

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO transfers
   (sender_id, recipient_id, amount) VALUES (?, ?, ?)")

for (Object[] transfer : transfers) { pstmt.setInt(1, (Integer) transfer[0]); pstmt.setInt(2, (Integer) transfer[1]); pstmt.setInt(3, (Integer) transfer[2]);
pstmt.addBatch(); // Encolar para más tarde }
int[] results = pstmt.executeBatch(); // Enviar todo de una vez
Consultas a una base de datos PostgreSQL en Java

¡Vamos a practicar!

Consultas a una base de datos PostgreSQL en Java

Preparing Video For Download...