ResultSet e SimpleDataFormtat

8 respostas
P

Olá!

Estou alguns dias brigando com um desafio que obtive na apostila da Caelum, que indica este forum para consultas.

Bem no inicio da apostila, é mostrado como usar o Resultset para fazer uma consulta ao banco de dados. Este result set trás um horário que foi gerado com getTimeInMillis da classe Date, ou seja, um horário totalmente ilegível.

O desafio seria usar a classe SimpleDateFormat neste Resultset e gerar uma data bonitinha ("dd/MM/yyyy"). Já consegui transformar a consulta em uma em uma string e usar o método applyPattern do SimpleDateFormat. O problema é que preciso transformar isso para Calendar para inserir no meu formulário.

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

/* a classe contato possui as variáveis da tabela contatos e está encapsulada pelos 
 * métodos get and set */

public class Contact {
	
	private String name;
	private String email;
	private String adress;
	private Calendar birthday;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getAdress() {
		return adress;
	}
	public void setAdress(String adress) {
		this.adress = adress;
	}
	public Calendar getBirthday() {
		return birthday;
	}
	public void setBirthday(Calendar date) {
		this.birthday = date;
	}
	
	
	
}
public List<Contact> getList() {
		
		
		
		try{
			List<Contact> contacts = new ArrayList<Contact>();
			PreparedStatement stmt = this.connection.prepareStatement("select * from contact");
			ResultSet rs = stmt.executeQuery();
			
			while(rs.next()){
				//criando objeto contato
				Contact contact = new Contact();
				contact.setName(rs.getString("name"));
				contact.setAdress(rs.getString("adress"));
				contact.setEmail(rs.getString("email"));
				
				//formatando a data
				Calendar date = Calendar.getInstance();
				date.setTime(rs.getDate("birthday"));
				contact.setBirthday(date);
				
			//inserindo  contatos na lista
			contacts.add(contact);
			}
			rs.close();
			stmt.close();
			return contacts;
		}
		catch(SQLException e){
			throw new RuntimeException(e);			
		}
	}

Alguém pode me dar uma luz?

Obrigado!

8 Respostas

P

Como disse, passei alguns dias tentando solucionar o problema. Verifiquei todos os tópicos já abertos sobre isto, mas não foi possível solucionar a dúvida.

wbdsjunior
Pablo Parada:
...

O problema é que preciso transformar isso para Calendar para inserir no meu formulário.

...

// ...

//formatando a data
Calendar date = Calendar.getInstance();
date.setTime(rs.getDate("birthday"));
contact.setBirthday(date);

// ...

você fez isso corretamente.

acho que não entendi qual é o problema. poderia explicar melhor?

Felagund

vc pode fazer no seu model o seguinte metodo

public String getBirthDayFormated(){
    return new SimpleDateFormat("dd/MM/yyyy").format(birthday.getTime());
}

Acho que é isso que vc quer.

P
# //formatando a data  
# Calendar date = Calendar.getInstance();  
# date.setTime(rs.getDate("birthday"));  
# contact.setBirthday(date);

Como aplico o SimpleDateFormat no "date"?

wbdsjunior

o amigo Felagund deu a dica.

o método SimpleDateFormat.format() retorna uma String, e não há como atribuir um objeto do tipo String a um do tipo Calendar.

P

Sim, passei dias tentando fazer algumas conversões com parse() e format(). A dúvida é : é possível eu deixar esta data no formato dd/MM/yyyy? Se sim, poderei salvar esta data em um tipo Calendar? Como eu faço?

wbdsjunior
Pablo Parada:
Sim, passei dias tentando fazer algumas conversões com parse() e format(). A dúvida é : é possível eu deixar esta data no formato dd/MM/yyyy? Se sim, poderei salvar esta data em um tipo Calendar? Como eu faço?

agora ficou mais claro!

sim, você pode deixar a data no formato dd/MM/yyyy, mas não pode armazená-la em um tipo Calendar, porque o retorno de SistemDateFormat.format() é um tipo String.

o ideal é que formate a data no momento de exibir na tela, ou tenha um método como o sugerido pelo amigo Felagund e o chame nesse momento.

e ao capturar a data digitada pelo usuário, faça um parse de String para Date e depois para Calendar. lembrando que o formato da data digitado pelo usuário deve se identico ao formato passado para SimpleDateFormat.

um exemplo:

import java.text.*;
import java.util.Calendar;

public class PessoaTeste {
    public static void main(String[] args) {
        Calendar dataNascimento = Calendar.getInstance();

        try {
            dataNascimento.setTime(new SimpleDateFormat("dd/MM/yyyy").parse("10/03/2010")); // supondo que o usuário digitou isso e o programa capturou de alguma forma
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Pessoa p = new Pessoa("Fulano", dataNascimento);
        System.out.println(p.getNome() + " nasceu em " + p.getDataNascimentoString());
    }
}

class Pessoa {
    private String nome;
    private Calendar dataNascimento;

    public Pessoa(String nome, Calendar dataNascimento) {
        this.nome = nome;
        this.dataNascimento = dataNascimento;
    }

    public String getNome() {
        return nome;
    }

    public Calendar getDataNascimento() {
        return dataNascimento;
    }

    public String getDataNascimentoString() {
        return new SimpleDateFormat("dd/MM/yyyy").format(dataNascimento.getTime());
    }
}
P

Obrigado, era isso que eu gostaria!

Criado 9 de março de 2010
Ultima resposta 11 de mar. de 2010
Respostas 8
Participantes 3