Classe ContaDAO.java
utilizando Transactions (Transações) no SQL, conforme orientação do artigo Transações no SQL: Mantendo os dados íntegros e consistentes:
public void alterar(Integer numero, BigDecimal valor) {
PreparedStatement ps = null;
String sql = "UPDATE conta SET saldo = ? WHERE numero = ?";
try {
// Iniciando a transação
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
ps.setBigDecimal(1, valor);
ps.setInt(2, numero);
ps.executeUpdate();
// Confirmar transação com commit
conn.commit();
} catch (SQLException e) {
// Reverter transação caso haja algum erro utilizando o rollback
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException ex) {
throw new RuntimeException("Erro ao reverter a transação", ex);
}
throw new RuntimeException("Erro ao atualizar conta", e);
} finally {
try {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.setAutoCommit(true);
conn.close();
}
} catch (SQLException ex) {
throw new RuntimeException("Erro", ex);
}
}
}