Dúvida Urgente

6 respostas
M

Pessoal,

Estou com um problema em um sistema que estou desenvolvendo.

public boolean consultarData(Date data) throws SQLException {
	
	session = HibernateUtil.getSessionFactory().openSession();

	List<Info> infos = session.createQuery("from Info").list();

	Iterator it = infos.iterator();
	
	while (it.hasNext()) {
		Info info = (Info) it.next();
		if (info.getData()== data) {
			System.out.println("Camara:"+info.getCamara());
			session.close();
			return true;
		}
	}
	session.close();
	return false;
}

Esse é a parte do código que estou com problema. Bom, não sei o que tem de errado ai mas, quando comparo a data capturada do banco com a que esta sendo passada por parâmetro, acho que a comparação não está sendo bem feita. Assim, depois que entra no while, ele executa os comandos todos só que no momento que tem que comparar e achar a data, que existe no banco, não está achando e está retornando falso.

Alguém sabe onde estou errando?

6 Respostas

marcoswp3x

A comparação com == utiliza o endereço de memória para verificar. Se ambos objetos apontarem para o mesmo endereço, então retornará true.
Tente utilizar o equals: info.getData().equals(data).

M

Marcos,

Tentei usar o equals(), só que deu a mesma coisa.

Sabe algo mais que pode ser?

Hellmanss

Imprime a data que está vindo do banco e verifica como ela está.

marcoswp3x

O equals compara o long, lá do Date, e nesse long está incluido dia, mês, ano, hora, minuto, segundo. Isto é, se for em um segundo diferente, a comparação vai retornar false.

Talvez seja interessante especificar como você quer comparar a data.
Tipo, utilizar a classe Calendar http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html pra comparar exatamente os valores que você quer que sejam iguais.

M

Quando imprimo a data vinda do banco, ai imprimi: 2009-05-21 00:00:00.0

pode ser isso que esta dando erro?

marcoswp3x

Sim. Pode ser que a data que você está comparando, está vindo 2009-05-21 01:25:05.7 aí retornará false

public static void main(final String[] args) throws InterruptedException {
        final Date date1 = new Date(System.currentTimeMillis());
        Thread.sleep(300);
        final Date date2 = new Date(System.currentTimeMillis());

        System.out.println(date1.equals(date2));//retorna false

        final Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(date1);

        final Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(date2);

        System.out.println(calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH));
        System.out.println(calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR));
    }

Roda esse exemplo, aí você consegue ver a diferença.

Criado 2 de junho de 2009
Ultima resposta 2 de jun. de 2009
Respostas 6
Participantes 3