Problemas com Data, cast

Pessoal, não estou conseguindo ler de uma classe através de um método uma data, o que esta errado ? Esta primeira classe gera a data.

import java.util.Calendar;
import java.util.Date;

public class Log {
	private Date dataInclusaoRegistro;

	private Date dataAlteracaoRegistro;

	private Calendar tempoAgora;
	
	private  Date data;

	public Log() {	
	}
	
	Log(Date dataInclusaoRegistro, String nomeInclusaoRegistro,
			Date dataAlteracaoRegistro, String nomeAlteracaoRegistro) {
		tempoAgora();
//		this.dataInclusaoRegistro = tempoAgora.getTime();
//		this.dataAlteracaoRegistro = tempoAgora.getTime();
		this.dataInclusaoRegistro = data;
		this.dataAlteracaoRegistro = data;
		this.nomeAlteracaoRegistro = nomeAlteracaoRegistro;
		this.nomeInclusaoRegistro = nomeInclusaoRegistro;
	}

	private void tempoAgora() {
		tempoAgora = Calendar.getInstance();
		data = tempoAgora.getTime();
	}

	public Date getDataAlteracaoRegistro() {
		return dataAlteracaoRegistro;
	}

	public Date getDataInclusaoRegistro() {
		return dataInclusaoRegistro;
	}

		
	}
	

Neste segundo eu tento pegar a data, mas ocorreu um cast. stmt.setDate(5, (Date) logDigitalFuncionario .getDataInclusaoRegistro());

Pessoal…será que alguém sabe o que estou fazendo de errado ?
:?

estranho… eu postei a resposta e acho q nao foi :roll:

hehehe bom cara… acho q o problema aí é que vc ta usando o objeto Date de dois packages diferentes…

quando vc usa o Calendar pra retornar um Date, esse Date é do pacote java.util…
e o Date que vc passa para o PreparedStatement é um Date do pacote java.sql

voce pode tentar usar assim ó:

java.util.Date datautil = tempoAgora.getTim();
java.sql.Date datasql = new java.sql.Date(datautil);
//agora vc pode usar esse objeto datasql pra colocar no preparedStatement
//.. bla bla bla
stmt.setDate(5, datasql);

deu pra entender ± ???
nao da pra fazer simplesmente um casting, vc tem q usar o construtor da classe java.sql.Date…

boa sorte!!

Beleza Renatu, hoje não vou conseguir fazer o teste, pois estou em casa, mas amanhã as 07:30 a primeira coisa que tentarei será o que vc me passou, de qualquer forma eu atualizarei com a resposta, por enquanto muito obrigado.

Gente, não estou conseguindo fazer esta conversão de data para um data que vou utilizar no sql, isto é normal ?? Por exemplo, preciso pegar uma data, hora, minuto,segundo e milesimo de segundo e guardar em um campo Data do banco de dados, em Oracle, fiz as mudanças que o Renato me solicitou mas esta dizendo que: "change type of data to long’, segue os código, por favor, help-me.[code] private java.util.Date data;

private java.sql.Date dataSql;

public Log() {	
}

Log(Date dataInclusaoRegistro, String nomeInclusaoRegistro,
		Date dataAlteracaoRegistro, String nomeAlteracaoRegistro) {
	tempoAgora();

// this.dataInclusaoRegistro = tempoAgora.getTime();
// this.dataAlteracaoRegistro = tempoAgora.getTime();
this.dataInclusaoRegistro = dataSql;
this.dataAlteracaoRegistro = dataSql;
this.nomeAlteracaoRegistro = nomeAlteracaoRegistro;
this.nomeInclusaoRegistro = nomeInclusaoRegistro;
}

private void tempoAgora() {
//	tempoAgora = Calendar.getInstance();
	data.getTime();
	dataSql = new java.sql.Date(data);
//	dataSql = tempoAgora.getTime();[/code]

Pessoal, fiz umas alterações ele funcionou, mas esta gravando somente a data, eu preciso da hora/min/seg também, como posso fazer? Segue o código.[code] Calendar data;

private java.sql.Date dataSql;

public Log() {	
}

Log(Date dataInclusaoRegistro, String nomeInclusaoRegistro,
		Date dataAlteracaoRegistro, String nomeAlteracaoRegistro) {
	tempoAgora();
	this.dataInclusaoRegistro = dataSql;
	this.dataAlteracaoRegistro = dataSql;
	this.nomeAlteracaoRegistro = nomeAlteracaoRegistro;
	this.nomeInclusaoRegistro = nomeInclusaoRegistro;
}

private void tempoAgora() {
	data = Calendar.getInstance();	
	dataSql = new java.sql.Date(data.getTimeInMillis());		
	
}[/code]

Pessoal !! alguém pode me ajudar ??

Oi Souza, primeiramente obrigado pela força, bem como sou iniciante em java devo estar cometendo muitos erros, mas gostaria de sanar alguns e se vc puder me ajudar eu lhe agradeço, seguinte: O que são classes VOs? Quando vc diz campos de classes vc se refere a criar os campos como locais ? O que vc quer dizer com a sincronizaçao das thread ?

Tudo bem Souza, beleza cara, entendi bem o que vc quiz dizer, gostaria de estar lhe agradecendo mais uma vez pela força.

obrigado.

Sinval,

 Não há erros no código. Ao criar a instancia de um Date, todas as informações sobre o tempo estão no objeto. O problema deve estar relacionado ao tipo do campo no banco e como você está formatando esta data antes de gravá-la. Por exemplo, se o campo no banco está como string e você simplemente manda gravar a data, ele irá utilizar a formatação constante nas configurações regionais do micro. Outra possibilidade é o campo no banco estar realmente como date mas você não está formatando corretamente a saída após recuperar este valor do banco. 

 Só uma observação:  Esta classe é um VO? Digo isso porque se não for, evite usar campos de classe como você está fazendo com a data. Isso torna a classe threadsafe, ou seja, elimina a chance de desincronização desta quando for acessada por várias threads.

[quote=SINVAL]Oi Souza, primeiramente obrigado pela força, bem como sou iniciante em java devo estar cometendo muitos erros, mas gostaria de sanar alguns e se vc puder me ajudar eu lhe agradeço, seguinte:

O que são classes VOs?


VO (Value Object) é um padrão de projeto também conhecido como DTO (Data Transfer Object). Serve apenas para transferência de dados entre classes e não possuem qualquer inteligência. Ou seja, possuem apenas campos de dados e geralmente fazem referência a um registro ou entidade (por exemplo, ClienteVO).


Quando vc diz campos de classes vc se refere a criar os campos como locais ?


Exatamente. Atributos de classe seria a definição mas usada. São os campos private de sua classe.


O que vc quer dizer com a sincronizaçao das thread ?


O que acontece é o seguinte: Em uma aplicação WEB (não sei se é seu caso), cada requisição é comumente associada a uma thread, isto é, uma linha de execução independente. Quando várias threads acessam uma mesma classe simultaneamente, fica evidente o perigo de ocorrer problemas de disputa por recursos compartilhados. Ou seja, se sua classe de log for única e todas as requisições utilizassem esta classe para realizar o log, com certeza daria problemas durante a execução. Um caso muito fácil de acontecer neste caso: Uma requisicao está atribuindo os valores dentro da classe de log, neste instante esta thread é interrompida e esta classe passa a ser usada por outra requisição. O que acontece, quando a primeira thread voltar a usar a classe Log, é que os valores estarão todos trocados, pois foram usados na outra requisição… Não sei se fui claro. Mas se ainda tiver dúvidas pode me escrever.

[/quote]

[quote=SINVAL]Tudo bem Souza, beleza cara, entendi bem o que vc quiz dizer, gostaria de estar lhe agradecendo mais uma vez pela força.

obrigado.[/quote]

Por nada. Só uma correção no que falei acima. As ocorrências da palavra classe na verdade se refere ao objeto, isto é, a uma instância. Quando me referi a uma única classe de log eu quis dizer um único objeto de log. Para o seu caso nunca cair neste problema, basta que você crie um objeto contendo as informações de log sempre que você precisar gravar. Ou seja, Log l = new Log(…) , sempre. Aí não há disputa.