3
respostas

Esta dando NullPointerException!

Olá, ao tentar gravar uma conta está dando o seguinte erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade !

3 respostas

Andrey, bom dia.

Por gentileza nos mande o print da sua classe ContaService no metodo abrir e da sua classe ConnectionFactory no metodo recuperarConexao para vermos o que está acontecendo.

Não é necessário print, caso queira copiar e colar e colocar aqui também serve, basta apenas inserir o </> na parte superior com o codigo selecionado.

public void abrir(DadosAberturaConta dadosDaConta) {
        var cliente = new Cliente(dadosDaConta.dadosCliente());
        var conta = new Conta(dadosDaConta.numero(), cliente);
        if (contas.contains(conta)) {
            throw new RegraDeNegocioException("Já existe outra conta aberta com o mesmo número!");
        }

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

        Connection conn;
        conn = connection.recuperarConexao();

        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();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        }
        
public class ConnectionFactory {
    public Connection recuperarConexao() {

        try {
            return DriverManager.getConnection("jdbc:mysql://localhost:3306/byte_bank?user=root&password=@Ndrey123");
        } catch (SQLException e) {
           throw new RuntimeException(e);
        }
    }
}

Andrey,

Pelo que eu estou vendo aqui, você provavelmente não está passando no construtor a connection,

O codigo informado pelo professor no construtor é necessário para a conexão

private Connection conn;

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

o codigo abaixo não deveria estar na sua classe ContaDAO

Connection conn;
conn = connection.recuperarConexao();

Na sua ContaService ai sim você precisa passar a conexão, que no caso ficaria assim:

public void abrir(DadosAberturaConta dadosDaConta) throws SQLException {
        Connection conn = connection.recuperarConexao();
        new ContaDAO(conn).salvar(dadosDaConta);
    }

Tente fazer essas alterações e veja se irá funcionar.