blz 
eu estou seguindo aquela apostila da caelum.
a classe Contato.java tá assim:
package pack.modelo;
import java.util.*;
public class Contato {
private Long id;
private String nome;
private String email;
private String endereco;
private Date dataNascimento;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Date getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Date data) {
this.dataNascimento = data;
}
}
esse aqui é o metodo na classe ContatoDAO.java
package pack.modelo;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import pack.jdbc.ConnectionFactory;
public class ContatoDAO {
// a conexão com o banco de dados
private Connection connection;
public ContatoDAO() {
this.connection = new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato) {
String sql = "INSERT INTO cadastros (nome, email, endereco, dataNascimento) VALUES (?, ?, ?, ?)";
try {
// prepared statement para inserção
PreparedStatement stmt = this.connection.prepareStatement(sql);
// seta oa valores
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEmail());
stmt.setString(3, contato.getEndereco());
stmt.setDate(4, (Date) contato.getDataNascimento());
// executa
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<Contato> getLista() {
try {
List<Contato> contatos = new ArrayList<Contato>();
String sql = "SELECT * FROM cadastros ORDER BY id ASC";
PreparedStatement stmt = this.connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
// criando o objeto Contato
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
// converte o sql.date em util.date antes do setEndereco
//contato.setDataNascimento(rs.getDate("dataNascimento"));
java.util.Date date = rs.getDate("dataNascimento");
contato.setDataNascimento(date);
// adicionando o objeto à lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void altera(Contato contato) {
try {
String sql = "UPDATE cadastros SET nome=?, email=?, endereco=?, dataNascimento=? WHERE id=?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEmail());
stmt.setString(3, contato.getEndereco());
stmt.setDate(4, (Date) contato.getDataNascimento());
stmt.setLong(5, contato.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void remove(Contato contato) {
try {
String sql = "DELETE FROM cadastros WHERE id=?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, contato.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
O jsp de listagem tá assim:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<c:import url="header.jsp" />
<h1>Lista de Contatos</h1>
<!-- cria lista -->
<jsp:useBean id="dao" class="pack.modelo.ContatoDAO" />
<table class="lista">
<thead>
<tr>
<th>Nome</th>
<th>Email</th>
<th>Endereço</th>
<th>Nascimento</th>
</tr>
</thead>
<tbody>
<!-- for -->
<c:forEach var="contato" items="${dao.lista}">
<tr>
<td>${contato.nome}</td>
<td>
<c:if test="${not empty contato.email}">
<a href="mailto:${contato.email}">${contato.email}</a>
</c:if>
<c:if test="${empty contato.email}">
Email não informado
</c:if>
</td>
<td>${contato.endereco}</td>
<td>
${contato.dataNascimento}
<fmt:formatDate value="${contato.dataNascimento}" pattern="dd/MM/yyyy" />
</td>
</tr>
</c:forEach>
</tbody>
</table>
<br clear="all" />
<c:import url="footer.jsp" />
meu teste
package pack.teste;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import pack.modelo.Contato;
import pack.modelo.ContatoDAO;
public class TestaCadLista {
public static void main(String[] args) throws SQLException {
ContatoDAO dao = new ContatoDAO();
List<Contato> contatos = dao.getLista();
// formata a data como eu quero que apareça
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
for(Contato contato : contatos) {
System.out.println("Nome: " + contato.getNome());
System.out.println("Email: " + contato.getEmail());
System.out.println("Endereço: " + contato.getEndereco());
System.out.println("Data de Nascimento: " + contato.getDataNascimento().getTime() + "\n");
//System.out.println("Data de Nascimento: " + contato.getDataNascimento() + "\n");
}
}
}