Dúvida exercício 2.17 FJ21 - Método altera[Resolvido]

Boa noite, estou tentando fazer o exercício 1 da apostila fj21, porém, está dando o seguinte erro:

Exception in thread “main” java.lang.NullPointerException
at br.com.caelum.jdbc.dao.ContatoDAO.altera(ContatoDAO.java:81)
at br.com.caelum.jdbc.teste.TestaAltera.main(TestaAltera.java:22)

Fiz uma busca no forum, encontrie um tópico, mas não identifiquei o problema no meu código.

Obrigado.

Segue o código

package br.com.caelum.jdbc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;

import java.util.List;
import java.util.ArrayList;
import java.util.Calendar;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {

	// a conexão com o banco de dados
	private Connection connection;
	
	public ContatoDAO(){
		this.connection = new ConnectionFactory().getConnection();
		System.out.println("Conectado");
	}
	
	public void adiciona(Contato contato) throws SQLException {
		
			String sql = "INSERT INTO contatos (nome, email, endereco, dataNascimento) values(?,?,?,?)";
		
			// prepared statement para inserção
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			// seta os valores
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			
			// executa
			stmt.execute();
			stmt.close();	
	}
	
	public List<Contato> getLista() throws SQLException{
		
			List<Contato> contatos = new ArrayList<Contato>();
			PreparedStatement stmt = connection.prepareStatement("Select * from contatos where nome like 'A%' ");
			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"));
				
				// montando a data através do Calendar
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("dataNascimento"));
				contato.setDataNascimento(data);
				
				// adicionando o objeto à lista
				contatos.add(contato);
			}
			rs.close();
			stmt.close();
			return contatos;
	}
	
	public void altera(Contato contato) {
		
			String sql = "update contatos set nome=?, email=?, endereco=?, dataNascimento=? where id=?";
			
			try{
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			stmt.setLong(5, contato.getId());
			stmt.execute();
			stmt.close();	
			}catch(SQLException e){
				e.printStackTrace();
			}
	}
	
	public void remove(Contato contato) throws SQLException{
		
			PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
			stmt.setLong(1, contato.getId());
			stmt.execute();
			stmt.close();
	}
}
package br.com.caelum.jdbc.teste;

import java.sql.SQLException;


import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class TestaAltera {
	
	
	public static void main(String[] args) {
		
			Contato contato = new Contato();
			ContatoDAO dao = new ContatoDAO();
			contato.setNome("Novo");
			contato.setEmail("novo email");
			contato.setEndereco("novo endereço");
			contato.setId(1);
		
			dao.altera(contato);
	}

}

vc não atrbuiu valor para data de nascimento

vc esta chamando getDataDeNascimento()
só que ele está nula

acho que é só isso

Olá brmonteiro, funcionou. Era isso mesmo.
Muito Obrigado, é que imaginei que por se tratar de uma alteração, iria manter o dado anterior da data, já que seria a data atual.