Problemas com DAO e For each

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.

[code]
public class consultaContato
{
LinkedList<contatos.Contato> listacontato = new LinkedList();
Contato contato = new Contato();
public LinkedList 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;
}

}[/code]

[code]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());
  }
}

}[/code]

Saída do programa
run:
1 testeinsercao contato@contato.com.br rua lateral
2 Bruno bffermino@gmail.com rua india
3 Bruno bffermino@gmail.com rua india
4 teste email@email.com.br rua sudao
Nome:teste Endereco:rua sudao Email:email@email.com.br Data1291773600000
Nome:teste Endereco:rua sudao Email:email@email.com.br Data1291773600000
Nome:teste Endereco:rua sudao Email:email@email.com.br Data1291773600000
Nome:teste Endereco:rua sudao Email:email@email.com.br Data1291773600000

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....

Obrigado pela ajuda.
Realmente era este o problema!

Funcionando normalmente agora.

Obrigado,