Problemas com DAO e For each

2 respostas
B

Olá pessoal,
Estou iniciando meus estudos em acesso a banco de dados em Java, porém ontem tive um problema na exibição do conteúdo trazido pelo banco de dados.
Criei uma Classe Contato, que contém os campos do contato.
A classe Connection Factory somente realiza a conexão com o banco de dados, acredito que esteja tudo certo com esta clase pois está inserindo normalmente no banco de dados.
A Classe consulta contato realiza a busca no banco de dados e devolve uma LinkedList
No método main apenas executo a Consulta e percorro o LinkedList para exibição dos dados, porém ao exibir os dados da LinkedList, ele mostra sempre os mesmos dados repetidos.
Quando exibo o contato retornado pelo ResultSet ele mostra todos os contatos que estão na tabela, acredito que o problema esteja no For Each que criei ou algo errado na Lista Ligada.
Gostaria da ajuda de vocês para resolução dessa ajuda.

public class consultaContato
{
    LinkedList<contatos.Contato> listacontato = new LinkedList<Contato>();
    Contato contato = new Contato();
    public LinkedList<Contato> Consulta()
    {
        try
        {
        Connection conexao = new ConnectionFactory().getConnection();
        contato = new Contato();
        String sql="select * from contatos";
        PreparedStatement stmt = conexao.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
            while(rs.next())
            {
                System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4));
                contato.setNome(rs.getString("nome"));
                contato.setEmail(rs.getString("email"));
                contato.setEndereco(rs.getString("endereco"));
                Calendar data = Calendar.getInstance();
                data.setTime(rs.getDate("dataNascimento"));
                contato.setDataNascimento(data);
                //contato.toString();
                listacontato.add(contato);
            }
        stmt.close();
        conexao.close();
        }
        catch(SQLException e)
        {
            System.out.println("Erro ao efetuar consulta");
        }
        return listacontato;
    }
    
}
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
      LinkedList<Contato> listacontato = new consultaContato().Consulta();
        for (Contato contato : listacontato)
        {
          System.out.print("Nome:"+contato.getNome()+"\t");
          System.out.print("Endereco:"+contato.getEndereco()+"\t");
          System.out.print("Email:"+contato.getEmail()+"\t");
          System.out.println("Data"+contato.getDataNascimento().getTimeInMillis());
      }
    }
}

Saída do programa
run:
1 testeinsercao [email removido] rua lateral
2 Bruno [email removido] rua india
3 Bruno [email removido] rua india
4 teste [email removido] rua sudao
Nome:teste Endereco:rua sudao Email:[email removido] Data1291773600000
Nome:teste Endereco:rua sudao Email:[email removido] Data1291773600000
Nome:teste Endereco:rua sudao Email:[email removido] Data1291773600000
Nome:teste Endereco:rua sudao Email:[email removido] Data1291773600000

2 Respostas

pmlm

while(rs.next()) { System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4)); contato.setNome(rs.getString("nome")); contato.setEmail(rs.getString("email")); contato.setEndereco(rs.getString("endereco")); Calendar data = Calendar.getInstance(); data.setTime(rs.getDate("dataNascimento")); contato.setDataNascimento(data); //contato.toString(); listacontato.add(contato); }

Estás a utilizar sempre o mesmo contato. Antes de fazer os sets, tens de criar um novo contato.

while(rs.next()){
    contato = new Contato();
    contato.set....
B

Obrigado pela ajuda.
Realmente era este o problema!

Funcionando normalmente agora.

Obrigado,

Criado 15 de dezembro de 2010
Ultima resposta 15 de dez. de 2010
Respostas 2
Participantes 2