Transações e processamento em lote

Consultando um banco de dados PostgreSQL em Java

Miller Trujillo

Staff Software Engineer

Qual é o problema?

  • Transação: uma rede de segurança para operações de banco de dados
  • Todas as operações têm sucesso ou falham juntas

$$

$$

Exemplo de transação de transferência bancária

Consultando um banco de dados PostgreSQL em Java

As propriedades ACID

  • Atomicidade: operações completas ou nenhuma se aplica
  • Consistência: banco de dados permanece válido
  • Isolamento: evita interferência entre operações
  • Durabilidade: transações concluídas persistem

Propriedades ACID

  • Por padrão, JDBC opera em modo de auto-commit 🔄
Consultando um banco de dados PostgreSQL em Java

Controle de transações no JDBC

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

try (...) { // Execute seus comandos SQL aqui
conn.commit();
} catch (SQLException e) { conn.rollback(); }
Consultando um banco de dados PostgreSQL em Java

Exemplo de transferência bancária

// Reduz o saldo do remetente
String withdrawSQL = "UPDATE accounts SET balance = balance - ?
  WHERE account_id = ? AND balance >= ?";

// Aumenta o saldo do destinatário String depositSQL = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";

$$

  • UPDATE - modifica linhas existentes em uma tabela
  • SET - especifica quais colunas mudar
Consultando um banco de dados PostgreSQL em Java

Exemplo de transferência bancária

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

conn.setAutoCommit(false);
try { try (PreparedStatement withdrawStmt = conn.prepareStatement(withdrawSQL); PreparedStatement depositStmt = conn.prepareStatement(depositSQL)) { // Defina parâmetros e execute ambos os comandos... }
conn.commit();
} catch (SQLException e) { conn.rollback(); } }
Consultando um banco de dados PostgreSQL em Java

Processamento em lote

  • Agrupa várias operações juntas

$$

Screenshot 2025-12-03 at 10.40.25.png

Consultando um banco de dados PostgreSQL em Java

Exemplo de processamento em lote

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(); // Queue for later }
int[] results = pstmt.executeBatch(); // Send all at once
Consultando um banco de dados PostgreSQL em Java

Vamos praticar!

Consultando um banco de dados PostgreSQL em Java

Preparing Video For Download...