Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Não entendo aonde estou errando.

Alguém pode me ajudar a achar o problema por favor ? Estava com um problema no meu codigo e tentei ver o codigo no github dado na aula para ver oque eu estava errando. Mas esse erro ocorre ate no github.

Link: https://github.com/alura-cursos/byte-bank-alura/tree/curso_jdbc_aula_4

Criar contas funciona sem problemas.

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

6 respostas

Olá, Wilson!

Cara pelo erro parece que você não tem a coluna esta_ativa no banco, consegue dar uma olhada e garantir que tenha ?

Eu realmente passei batido por isso. Não sei porque no github tem esta parte da coluna ativa pois não tem "coluna_ativa". Deve ser mais para frente na aula... Obrigado!

Única coisa que ainda não entendo se puder aproveitar e me ajudar é isso.

    public Set<Conta> listar() {
        PreparedStatement ps;
        ResultSet resultSet;
        Set<Conta> contas = new HashSet<>();

        String sql = "SELECT * FROM conta";

        try {
            ps = conn.prepareStatement(sql);
            resultSet = ps.executeQuery();

            while (resultSet.next()) {
                Integer numero = resultSet.getInt(1);
                BigDecimal saldo = resultSet.getBigDecimal(2);
                String nome = resultSet.getString(3);
                String cpf = resultSet.getString(4);
                String email = resultSet.getString(5);

                DadosCadastroCliente dadosCadastroCliente =
                        new DadosCadastroCliente(nome, cpf, email);
                Cliente cliente = new Cliente(dadosCadastroCliente);

                contas.add(new Conta(numero, saldo, cliente));
            }
            resultSet.close();
            ps.close();
            conn.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return contas;
    }

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

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

Eu consigo depositar sem problemas mas o valor no IntelliJ IDE não altera. Assim como nas opções de transferência e saque falando que saldo é insuficiente mesmo tendo saldo no MySQL Workbench.

Wilson, boa tarde.

Já tentou debugar e ver se realmente o saldo está retornado algum valor? Pois pelo que da pra ver, da de entender que o seu problema está na linha, BigDecimal saldo = resultSet.getBigDecimal(2);

Se os dados na coluna especificada estiverem no formato errado, o método getBigDecimal não conseguirá converter corretamente o valor para um BigDecimal, resultando em zero. Por exemplo, se a coluna contiver valores de texto que não podem ser convertidos em números válidos, isso pode causar o problema.

As vezes você irá precisar olhar qual é o tipo da variavel que está no seu banco de dados e quando você for chamar a linha terá que pegar e converter para bigDecimal,

Exemplo: BigDecimal saldo = new BigDecimal(resultSet.E AQUI VOCÊ COLOCA O TIPO CORRETO);

Eu usei como foi ensinado na aula para criar o banco de dados.

CREATE TABLE `conta` (
  `numero` int NOT NULL,
  `saldo` decimal(10,0) DEFAULT NULL,
  `cliente_nome` varchar(50) DEFAULT NULL,
  `cliente_cpf` varchar(11) DEFAULT NULL,
  `cliente_email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`numero`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

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

Esta errado o saldo ? Se sim tem uma forma de alterar sem deletar e fazer de novo ?

solução!

Achei o erro. Esta parte em this.saldo estava como BigDecimal.ZERO...

public class Conta {

    private Integer numero;
    private BigDecimal saldo;
    private Cliente titular;
    private boolean estaAtiva;

    public Conta(Integer numero, BigDecimal valor, Cliente titular, Boolean estaAtiva) {
        this.numero = numero;
        this.titular = titular;
        this.saldo = BigDecimal.ZERO
        this.estaAtiva = estaAtiva;
    }

O certo era assim, realmente não lembro porque deixei igual o código acima.

public class Conta {

    private Integer numero;
    private BigDecimal saldo;
    private Cliente titular;
    private boolean estaAtiva;

    public Conta(Integer numero, BigDecimal saldo, Cliente titular, Boolean estaAtiva) {
        this.numero = numero;
        this.titular = titular;
        this.saldo = saldo;
        this.estaAtiva = estaAtiva;
    }