Formatando data

Estou tendo dificuldade para formatar data do tipo calendar usando SimpleDateFormat. As datas estão alocadas no banco de dados, quando tento compilar o programa gera um erro dizendo que não pode converter object para String. Já procurei bastante dicas no google, mas não estou conseguindo resolver. Qual a melhor forma para resolver este problema?


Classe Contato

package br.com.caelum.jdbc.modelo;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Contato {

	private Long id;
	private String nome;
	private String email;
	private String endereco;
	private Calendar dataNascimento;

	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 Calendar getDataNascimento() {
		return this.dataNascimento;
	}

	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

      public 	String getDataFormatada(){
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		Calendar calendar=Calendar.getInstance();
		String datas =sdf.format(calendar.getTime());
		return datas;
		
	}
}

Classe ContatoDao

package br.caelum.jdbc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

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

public class ContatoDao {
	
	private Connection connection;
	
	public ContatoDao(){
		this.connection=new ConnectionFactory().getconnection();
	}
	
	public void adiciona(Contato contato){
		String sql="insert into contatos" +"(nome,email,endereco,dataNascimento)"+"values(?,?,?,?)";
		try{
			
			PreparedStatement stmt=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.execute();
			stmt.close();
		}catch(SQLException e){
			System.out.println(e);
		
	}
		
	}
	
	public List <Contato> getLista(){
		try{
			List <Contato> contatos=new  ArrayList<Contato>();
			PreparedStatement stmt=this.connection.prepareStatement("select * from contatos");
			ResultSet rs= stmt.executeQuery();
			
			while(rs.next()){
				Contato contato = new Contato();
				contato.setId(rs.getLong("id"));
				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);
				
				contatos.add(contato);
				
			}
			rs.close();
			stmt.close();
			return contatos;
			
		}catch(SQLException e){
			throw  new RuntimeException(e);
	}
	}

}

Classe Main

package br.com.caelum.jdbc.teste;

import java.text.SimpleDateFormat;
import java.util.List;

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

public class TestaLista {
	
	public static void main(String[] args) {
		
		ContatoDao dao = new ContatoDao();
		List<Contato> contatos = dao.getLista();
		
		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 formatada: "+contato.getDataFormatada());
			
			
}
	}

}

Olá! tenho esta classe pronta …

public class Datas {

    private final SimpleDateFormat FORMATO_DATA = new SimpleDateFormat("EEEE, d' de 'MMMM' de 'yyyy HH:mm:ss");
    private final SimpleDateFormat DATA = new SimpleDateFormat("dd/MM/yyyy");

    public Datas() {

    }

    public String dataAtual() {
        return DATA.format(new Date());
    }
    public String dataCompleta() {
        return FORMATO_DATA.format(new Date());
    }

    public String dataAtual(Date data) {
        return FORMATO_DATA.format(data);
    }

    public Date dataAtual(String data) throws ParseException {
        return FORMATO_DATA.parse(data);
    }

    /**
     *
     * @return
     */
    public Date date() {
        return new Date();
    }

    public static Datas getInstance() {
        return DatasHolder.INSTANCE;
    }

    private static class DatasHolder {

        private static final Datas INSTANCE = new Datas();
    }

    
    public java.sql.Date getCurrentDate() {
        java.util.Date today = new java.util.Date();
        return new java.sql.Date(today.getTime());
    }

}

Você pode tentar ao invés de usar o tipo Calendar usar o tipo Date na Classe Contato

private Date dataNascimento;
public String getDataFormatada(Date dataNascimento)
{
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	String datas =sdf.parse(dataNascimento);
	return datas;
	
}

Espero ter ajudado.

Dá um erro no parse, fala que não pode converter String em Date.

Tentei dessa forma também, fala que não pode converter o objeto em como Data.

public String getNascFormata(Calendar dataNascimento){
SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
String datas =sdf.format(dataNascimento);
return datas;
}

Quebrando a cabeça aqui, consegui resolver o problema.
A solução é:

Na classe Contato criar um método

  public String getNascFormata(){
        String dataFormatada = new SimpleDateFormat("dd/MM/yyyy").format(getDataNascimento().getTime());
	return dataFormatada;
}

E na classe main

 System.out.println(contato.getNascFormata()+"\n");

Resolveu meu problema.