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…
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();
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;
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 ?
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=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.