[RESOLVIDO] Banco de dados - Valores errados

Olá galera, estou fazendo um método p/ realizar uma busca no meu banco.
Oque eu quero é que , o método me retorne uma lista com todos os elementos da tabela produtos que tem q quantidade maior que 0.

Métodos que fazem isso

public void buscaEstoque(){////////SOMENTE PRODUTOS COM QUANTIDADE >0. CASO CONTRARIO, O PRODUTO NAO ESTARÁ NO ESTOQUE this.con = new ConnectionFactory().getConnection(); try { Produto p = new Produto(); List<Produto> lista = new ArrayList<Produto>(); PreparedStatement stmt = this.con.prepareStatement("select * from produtos where quantidade>0"); ResultSet rs = stmt.executeQuery(); while (rs.next()){ p.setId(rs.getLong("id")); p.setNome(rs.getString("nome")); p.setClasse(rs.getString("classe")); p.setQuantidade(rs.getInt("quantidade")); p.setValidade(rs.getDate("validade")); lista.add(p); } rs.close(); stmt.close(); for(Produto pro: lista){ System.out.println(); System.out.print("ID: "+pro.getId()); System.out.print(" Nome: "+pro.getNome()); System.out.print(" Classe: "+pro.getClasse()); System.out.print(" Quantidade: "+pro.getQuantidade()); System.out.print(" Validade: "+pro.getValidade()); System.out.println("\n"); } } catch (SQLException e) { throw new RuntimeException(e); } }

A lista está voltando, com 3 elementos (eu tenho 3 elementos cadastrados no BD com quantidade >0), porém, todos os elementos que a lista me retorna estão iguais.
Retorno:

[quote]ID: 10 Nome: Uva Classe: Natural Quantidade: 60 Validade: 2011-11-25

ID: 10 Nome: Uva Classe: Natural Quantidade: 60 Validade: 2011-11-25

ID: 10 Nome: Uva Classe: Natural Quantidade: 60 Validade: 2011-11-25
[/quote]

Eu pude perceber, o elemento que fica salvo na lista, é sempre o ultimo, o que tem o ID maior.
Gostaria que a galera me ajudassem a resolver este problema. Grato

PS: Fazendo a busca direto da linha de comando do MySql, o retorno da tabela vem com os 3 elementos cadastrados certinho.

try {   
                
                List<Produto> lista = new ArrayList<Produto>();   
                PreparedStatement stmt = this.con.prepareStatement("select * from produtos where quantidade>0");   
                ResultSet rs = stmt.executeQuery();   
                while (rs.next()){   
                     Produto p = new Produto();   // Isso resolve seu problema
                    p.setId(rs.getLong("id"));   
                    p.setNome(rs.getString("nome"));   
                    p.setClasse(rs.getString("classe"));   
                    p.setQuantidade(rs.getInt("quantidade"));   
                    p.setValidade(rs.getDate("validade"));   
                    lista.add(p);   
                }   

Flw

Ha ha. É verdade. Problema Resolvido.
Obrigado pela ajuda!

shushus…
Edita seu 1º post o título para resolvido.
Abraços

Já que eu entrei aqui, vou colaborar tambem.

Como a amigo flw ai em cima faltou vc instanciar o produto a cada iteração, pois da forma q estava vc sempre alterava as propriedades em cima da mesma referencia de memoria criado no inicio do try.

Pode deixar, vou eiditar o post.
Pois é cara. Nem tinha percebido isso.
haha.

  • faz parte. Estou começando agora. Depois de um tempo eu pego as malicias.