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

Faça como eu fiz: criando a classe DAO

Com base no aprendizado da aula 02. Cadastro de informações, segue a configuração: Classe ContaDAO.java:

public class ContaDAO {

    private Connection conn;

    ContaDAO(Connection connection) {
        this.conn = connection;
    }

    public void salvar(DadosAberturaConta dadosDaConta) {
        var cliente = new Cliente(dadosDaConta.dadosCliente());
        var conta = new Conta(dadosDaConta.numero(), BigDecimal.ZERO, cliente);

        String sql = "INSERT INTO conta (numero, saldo, cliente_nome, cliente_cpf, cliente_email)" +
                "VALUES (?, ?, ?, ?, ?)";

        try {
            PreparedStatement preparedStatement = conn.prepareStatement(sql);

            preparedStatement.setInt(1, conta.getNumero());
            preparedStatement.setBigDecimal(2, BigDecimal.ZERO);
            preparedStatement.setString(3, dadosDaConta.dadosCliente().nome());
            preparedStatement.setString(4, dadosDaConta.dadosCliente().cpf());
            preparedStatement.setString(5, dadosDaConta.dadosCliente().email());

            preparedStatement.execute();
            preparedStatement.close();
            conn.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

Classe ContaService.java:

public class ContaService {

    //...
    public void abrir(DadosAberturaConta dadosDaConta) {
        Connection con = connection.recuperarConexao();
        new ContaDAO(con).salvar(dadosDaConta);
    }
    //...
}

Só acho que ficaria mais organizado e menos código, se colocássemos o Connection con = connection.recuperarConexao(); dentro da classe ContaDAO, assim, não precisaríamos colocar todas as vezes esse código, quando formos instanciar a classe new ContaDAO() .

1 resposta
solução!

Bom dia!

Sim, você tem razão quando comenta sobre a questão de abertura de conexão. Realmente, só o DAO deve conhecer a forma de acessar o banco de dados. Ele não precisaria receber tal conexão.

Porém, aqui é uma iniciação à codificação. No "mundo real" existe uma série de melhorias a serem aplicadas nesse código, como o tratamento de transações, o uso de pools de conexão, etc.

Parabéns pelo empenho nos estudos e continue praticando.

Espero ter ajudado. Se sua dúvida foi sanada, marque este tópico como solucionado.

Bons estudos!