Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Faça como eu fiz: realizando delete

Classe ContaDAO.java, executando o delete com Transaction:

public void deletar(Integer numeroDaConta) {
    PreparedStatement ps = null;
    String sql = "DELETE FROM conta WHERE numero = ?";
    
    try {
        // Iniciar transação
        conn.setAutoCommit(false);

        ps = conn.prepareStatement(sql);
        ps.setInt(1, numeroDaConta);

        ps.executeUpdate();

        // Confirmar transação no banco de dados com commit
        conn.commit();
        
    } catch (SQLException e) {
        // Reverter transação em caso de erro, chamando 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 deletar a 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);
        }
    }
}

Classe ContaService.java :

//...
public void encerrar(Integer numeroDaConta) {
        var conta = buscarContaPorNumero(numeroDaConta);
        if (conta.possuiSaldo()) {
            throw new RegraDeNegocioException("Conta não pode ser encerrada pois ainda possui saldo!");
        }

        Connection conn = connection.recuperarConexao();

        new ContaDAO(conn).deletar(numeroDaConta);
    }
//...

Não é uma boa prática excluírmos os dados definitivamente do banco de dados, pois caso precise obter alguma informação, não teremos mais esses dados no banco. Desta forma, uma boa solução seria criarmos algo como Status da conta, deixa ela como Encerrada. Bloqueando qualquer ação na regra de negócio. Mas como o objetivo e treinarmos a realização do DELETE, segue a solução. :)

1 resposta
solução!

Boa noite Anderson! Tudo bem com você?

Obrigado por compartilhar seu modo de resolução com a comunidade Alura. Concordo com você, em um cenário real, é melhor marcar a conta como "Encerrada" em vez de deletá-la. Um histórico perdido pode significar um caos, especialmente em situações que exigem auditoria ou recuperação de dados, o que é comum em bancos.

Outros cenários em que marcar como encerrado e não deletar podem ser úteis é no histórico de pedidos em e-commerce, reintegração de contas ou usuários no futuro, recuperação de informações em caso de erro, dentre outros.

Espero ter ajudado. Abraços e bons estudos!

Continue se empenhando e se tiver dúvidas, não hesite em voltar ao fórum ✓