2
respostas

Então, fiz a correção no projeto e agora está dando esse erro. Já revisei várias vezes o código, mas continua aparecendo a mensagem para atualizar o MySQL. Já fiz a atualização, mas o problema persiste.

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

2 respostas

O erro que você está enfrentando parece estar relacionado a um índice de parâmetro fora do intervalo ao executar uma consulta SQL. Isso pode ocorrer quando você está usando um PreparedStatement e tenta definir um valor para um parâmetro que não existe na consulta.

Com base na mensagem de erro fornecida, o problema parece estar ocorrendo nas seguintes classes:

ContaDAO (linha 115) ContaService (linha 97 e linha 86) BytebankApplication (linha 98 e linha 24) A fim de resolver o problema, sugiro verificar as consultas SQL nessas linhas mencionadas e garantir que o número de parâmetros esteja correto e corresponda ao número de placeholders na consulta.

Verifique também se você está definindo corretamente os valores dos parâmetros ao usar os métodos setInt() ou métodos similares.

Além disso, revise o código relacionado à criação e configuração da conexão com o banco de dados para garantir que você esteja usando a versão correta do driver JDBC e que as configurações de conexão estejam corretas.

Se você precisar de ajuda adicional, compartilhe o código relevante dessas classes para que eu possa ajudá-lo de forma mais específica.

    var cliente = new Cliente(dadosDaConta.dadosCliente());
    var conta = new Conta(dadosDaConta.numero(),BigDecimal.ZERO, cliente,true);

    String sql = "INSERT INTO conta(numero,saldo,cliente_nome,cliente_cpf,cliente_email,esta_ativa)" +
            "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.setBoolean(6,true);

        preparedStatement.execute();
        preparedStatement.close();
        conn.close();

    }catch (SQLException e){
        throw new RuntimeException(e);
    }
}
public Set<Conta> lista() {
    PreparedStatement ps ;
    ResultSet resultSet ;
    Set<Conta> contas = new HashSet<>();

    String sql = "SELECT * FROM conta WHERE esta_ativa = true";

    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);
            Boolean estaAtiva = resultSet.getBoolean(6);


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

            contas.add( new Conta(numero,saldo,cliente,estaAtiva));
        }
        resultSet.close();
        ps.close();
        conn.close();

    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
    return contas;
}
public Conta listarPorNumero(Integer numero){

    String sql = "SELECT * FROM conta WHERE numero =" + numero + "and esta_ativa = true";

    PreparedStatement ps;
    ResultSet resultSet;
    Conta conta = null;
    try {
        ps = conn.prepareStatement(sql);
        ps.setInt(1,numero);
        resultSet = ps.executeQuery();

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

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

            conta = new Conta(numeroRecuperado,saldo,cliente,estaAtiva);
        }
        resultSet.close();
        ps.close();
        conn.close();

    }catch (SQLException e){
        throw new RuntimeException(e);
    }
    return conta;
    
    **contaService.
    **
public void encerrarLogico(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).alterarLogico(numeroDaConta);
}

private Conta buscarContaPorNumero(Integer numero) {
    Connection conn = connection.recuperarConexao();
    Conta conta = new ContaDAO(conn).listarPorNumero(numero);
            if (conta != null) {
                return  conta;
            }  else {
            throw  new RegraDeNegocioException("Não existe conta cadastrada com esse número!");
}

} private void alterar(Conta conta, BigDecimal valor) { Connection conn = connection.recuperarConexao(); new ContaDAO(conn).alterar(conta.getNumero(), valor); }

}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software