Porque não acha os registros?

Tenho, dentro de uma classe DAO, um método para fazer busca de itens de um pedido consultando duas tabelas. Meu banco de dados esta ok, ou seja, tem registros mas a função localizar não está encontrando registros para colocar no resultSet. O que devo fazer? Como buscar uma solução?

O código que não está encontrando registros é o que segue abaixo:

    public ArrayList<ItensPedidoClienteEstendida> carregarListaItens() {
        ArrayList<ItensPedidoClienteEstendida> listaItens = new ArrayList<>();
        ItensPedidoClienteEstendida itemPedido;
        listaItens = null;
        bd = BD.getInstance();
        sql = "SELECT i.id,"
                + " i.id_pedido_cli,"
                + " i.id_produto,"
                + " i.quantidade,"
                + " i.preco,"
                + " i.data_entrega,"
                + " p.descricao FROM item_pedido_cli AS i LEFT JOIN produtos AS p"
                + " ON  i.id_produto = p.id"
                + " WHERE i.id = ?;";
        try {
            statement = bd.connection.prepareStatement(sql);
            statement.setString(1, String.valueOf(pedidoCliente.getId()));
            resultSet = statement.executeQuery();
            int numeroItem = 0;
            while(resultSet.next()) {
                numeroItem++;
                itemPedido = new ItensPedidoClienteEstendida();
                itemPedido.setId(resultSet.getInt(1));
                itemPedido.setId_pedido_cli(resultSet.getInt(2));
                itemPedido.setId_produto(resultSet.getString(3));
                itemPedido.setQuantidade(resultSet.getDouble(4));
                itemPedido.setPreco(resultSet.getDouble(5));
                itemPedido.setData_entrega(resultSet.getDate(6));
                itemPedido.setNumero_item(numeroItem);
                itemPedido.setDescricao_produto(resultSet.getString(7));
                listaItens.add(itemPedido);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Problemas na localização dos itens!\n" + e);
        } finally {
            BD.getInstance().close();
        }
        return listaItens;
    }

Atenciosamente,
Ronaldo

Como você não utiliza nenhuma ferramenta de log, recomendo que em cada catch você coloque pelo menos um printStackTrace() da exceção, assim ficará bem claro qual o problema e onde ele está acontecendo.
Exemplo:

} catch (Exception e) {
    e.printStackTrace(); // isso aqui vai te dizer exatamente a linha onde o problema aconteceu
    JOptionPane.showMessageDialog(null, "Problemas na localização dos itens!\n" + e);
}

Referente ao seu código, explica pra gente:

  • Se você tem essa instrução aqui:
    ArrayList<ItensPedidoClienteEstendida> listaItens = new ArrayList<>();

  • Depois tem essa instrução aqui:
    listaItens = null;

  • Mais adiante tem essa instrução aqui:
    listaItens.add(itemPedido);

O que espera que aconteça?

1 curtida

De fato é ignorância minha que eu espero que vocês esclareçam. Espero que listaItens seja iniciada como um ArrayList de objetos ItensPedidoClienteEstendida.

Depois, espero que essa lista carregue o valor null.

Por fim, se houver registro no resultSet, eu espero que listaItens adicione registro por registro para que o programa reconheça que seu valor não é mais null.

Notei na sua pergunta que tem algo errado com meu código. Não sei o que é e gostaria que você me ajudasse a concertá-lo se for possível. O objeto lista itens retorna null ou uma lista de itens se houver, eu preciso de um valor nulo quando retorno ao chamador do método para que ele saiba que não foi encontrado nenhum registro. Desculpe alguma coisa.

Está acontecendo de meu resultSet ser encontrado vazio! Tem algum problema na minha busca sql que eu não consigo entender.

Obrigadão,
Ronaldo

Colocou o e.printStackTrace()?
Qual foi a saída no console?

1 curtida

Não está acontecendo Exception!!! Não tem erro registrado.

Opa! Opa! Opa! Erro meu. Eu troquei o nome de uma coluna no where. Tudo resolvido!!!

Então o código que você está executando é diferente do código que você postou no fórum.

O código que você postou ocasiona NullPointerException pois você atribui null à variável listaItens e em seguida tenta chamar o método add dessa variável.

:person_shrugging:t2:

1 curtida

Alterei o código, retirando a declaração de null e usei .size () == 0 para determinar se a lista estava vazia. Eu tinha errado o nome da coluna por isto não encontrava nenhum registro. Agora eu concertei os dois erros.
Falha minha!!!
Obrigado,
Ronaldo

Ja conferiu a documentação da interface List?
Tem um método que é justamente para verificar se a lista está vazia, nem precisa comparar o size().

1 curtida