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;
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
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 é 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.
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());
É, 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.
Obrigado.