Exception in thread "main" java.lang.ClassCastException: java.util.Date

Olá pessoal,
estou com problemas para persistir data no sql server. Vejam:
A variável da minha classe

[code]import java.util.Date;
private Date dataInclusao;

public Date getDataInclusao() {
return dataInclusao;
}

public void setDataInclusao(Date dataInclusao) {
this.dataInclusao = dataInclusao;
}[/code]
O DAO, onde está o código para inserção na tabela:

Com esse código acima, dá o seguinte erro:
[color=red]Exception in thread “main” java.lang.ClassCastException: java.util.Date
at com.br.harvest.dao.HarServerLibMudDaoImpl.incluirServidoresProjeto(HarServerLibMudDaoImpl.java:129)
at com.br.harvest.programas.HarInstallServers.executaProcessoBD(HarInstallServers.java:48)
at com.br.harvest.main.HarServerLibMudExecute.main(HarServerLibMudExecute.java:44)[/color]

Já tentei usar o seguinte:
preparedStatement.setTimestamp(5,harServerLibMud.getDataInclusao()); mas não é aceito pelo eclipse.[color=red]
The method setTimestamp(int, Timestamp) in the type PreparedStatement is not applicable for the arguments (int, Date)[/color]

preparedStatement.setDate(5,harServerLibMud.getDataInclusao());
[color=red]The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments int, Date) [/color]

Eu quero inserir a data atual na tabela e estou usando
dataInclusao = new Date();
esse é o valor que quero gravar na tabela.

Criei no banco de dados o campo de data da seguinte forma:

alter table HarServerLibMud add DataInstalacao datetime;

Agradeço se puderem me dar uma ajuda.
abs.

Isso acontece, pq vc está tentando persistir um objeto da classe java.util.Date, quando na realidade deveria persistir um objeto da classe java.sql.Date
Então faz o seguinte. Olha os construtores da classe java.sql.Date que lá tem como vc converter de uma util.Date pra sql.Date

:wink:

Oi m0ska, com sua dica e umas pesquisas na net, até que funcionou, mas eu também preciso gravar a hora.
Resumindo, eu preciso inserir a data e hora em que o registro foi salvo na tabela.
Caso tenha uma forma melhor, gostaria que me mostrasse, por favor.
Vou mostrar como está agora, após as alterações.
A classe

import java.util.Date; private Date dataInclusao; public Date getDataInclusao() { return dataInclusao; } public void setDataInclusao(Date dataInclusao) { this.dataInclusao = dataInclusao; }

A data a ser gravada

dataInclusao = new Date(); java.sql.Date dataInclusaoSql = new java.sql.Date(dataInclusao.getTime());
O DAO que recebe a data passada anteriormente

Fiz um código de teste para recuperar a data

List<HarServerLibMud> lista = dao.obterListaServidoresPorProjetoPacote(harServerLibMud); for(HarServerLibMud var : lista){ System.out.println(var.getDataInclusao()); System.out.println("\n"); }

Saída no console
[color=red]2008-09-22 00:00:00.0[/color]

Como eu recupero [color=blue]a hora[/color] e a data no formato dd/MM/yyyy ?
Eu continuo pesquisando,mas se puder dar mais algumas dicas, fica mais grato ainda,
abs.

Então, neste caso, ao invez de utilizar java.sql.Date c vai utilizar java.sql.TimeStamp :smiley: é a mesma coisa c pode conveter de um pra o outro ou vice versa.

Ah sim, ao invez de usar jdbc, pra maioria das aplicações, salvo as peculiares, eu remomendo o uso de HIBERNATE.

Sucesso!

Então, conforme mencionei anteriormente, já tentei o timeStamp

[quote]Já tentei usar o seguinte:
preparedStatement.setTimestamp(5,harServerLibMud.getDataInclusao()); mas não é aceito pelo eclipse.
[color=red]The method setTimestamp(int, Timestamp) in the type PreparedStatement is not applicable for the arguments (int, Date)[/color][/quote]
E não sei o motivo de dar erro quando tento usar TimeStamp

Quanto ao hibernate, eu já pensei em utilizá-lo, mas tenho restrições aqui no trabalho.
Vlw. Continuno tentando.

//Essa aqui é a data do objeto.
Date data = new Date();

//Agora jogo a data num calendar pra poder manipula-la
Calendar calendar = new GregorianCalendar();
calendar.setTime(data);
		
//Depois utilizo o construtor de java.sql. Timestamp que pegar o número de milisegundos desde 1970
//usando o método getTimeInMillis() da classe Calendar. :)
Timestamp time = new Timestamp(calendar.getTimeInMillis());

com isso seu problema deve estar resolvido :smiley:

m0ska, acho que estamos quase lá, gravou a data e hora na tabela, porém, veja o resultado que foi gravado:
2008-09-22 14:07:59.717

O problema é que o horário certo deveria ser 16:07 segundo o relógio do windows. Está marcando 2 horas a menos.
Alguma idéia?
abs.

Sim, no calendar ou na data tem que se definir o seu locale… algo do tipo… bem, mas aí já é outro tópico :smiley: nunca precisei mexer com locales.

É, estou olhando a API e vendo como posso aplicar o locale. Mas preciso descobrir como deixar isso default, pois em outra empresa eu utilizava o código abaixo que funcionava normalmente e agora está dando erro no timeStamp quando tento fazer, conforme mencionei:

o problema é que na época eu já utilizava o que estava pronto e não sabia como estava “configurado”.

Vou continuar pesquisando, mas agradeço sua atenção que foi de grande ajuda, caso tenha mais alguma idéia pra terminar de resolver isso, pode mandar. :wink:
Obrigado.