Gostaria de saber qual seria a melhor forma (ou a mais prática) de gravar a data e hora num campo no momento em que um formulario foi gravado.
Utilizando VRaptor, gostaria que no momento em que seja clicado no “enviar” do formulário, um campo “data” já definido no banco, seja populado pela data atual. A máscara é indiferente, poderia ser YYYYMMDD.
Opa, falha minha, melhor eu explicar um pouco mais o contexto…
Estou utilizando MySQL.
O começo da dúvida é em qual momento será “preenchido” este campo data.
Pensei em um javascript preencher um input hidden do formulário, mas não sei exatamente se isso é possível, pois digamos que eu coloque um “value” neste “input type=“hidden””, é provável que não dê certo, porque o VRaptor necessita que o input tenha no value algo como ${cadastro.data}.
Pensei também se há alguma forma de no momento que eu chamar a classe este campo já ser preenchido pela data, em java mesmo (se tratando de “hora”, esta opção seria pouco viável).
Ou no MySQL, se no momento que todos os dados preenchidos no formulário forem enviados para o banco, o campo data seja preenchido sem ter sido enviado pelo formulário, mas sim pelo próprio banco, no momento em que os outros dados foram inseridos.
A questão da data atual está resolvida, mas minha dúvida é parecida. Se eu quiser salvar a hora atual também, para saber em que momento foi o registro, como faço isso?
Editei temporariamente o tópico, removendo o status de [RESOLVIDO], pelo seguinte motivo:
Digamos que o campo data que foi apresentada a solução seja o campo “data de criação”, o problema foi resolvido perfeitamente.
Mas no caso de haver também um campo “data de alteração”, em que seja armazenada a data da última alteração, não poderia ser feito na entidade, pois o importante neste campo agora é a data em que ele foi editado, e não criado.
[quote=lhtaconi]Editei temporariamente o tópico, removendo o status de [RESOLVIDO], pelo seguinte motivo:
Digamos que o campo data que foi apresentada a solução seja o campo “data de criação”, o problema foi resolvido perfeitamente.
Mas no caso de haver também um campo “data de alteração”, em que seja armazenada a data da última alteração, não poderia ser feito na entidade, pois o importante neste campo agora é a data em que ele foi editado, e não criado.
Há alguma forma possível?
Obrigado.[/quote]
quando fizer o update você passa a data e horário.
Connection c ...
PreparedStatement ps = c.prepareStatement("update tabela set campo = ?, campo = ?, data = ? where codigo = ?");
ps.setString(1, campo);
ps.setString(2, campo);
ps.setDate(3, new java.sql.Date(new Date().getTime()));
ps.setLong(4, codigo)
ps.executeUpdate();
wbdsjunior, essa solução embora válida não seria necessariamente o que preciso.
Estou utilizando VRaptor, Hibernate, portanto, nada de SQL nos códigos da minha aplicação… hehe
O campo “data de edição” receberá a data atual quando for preenchido no momento da criação, na entidade, como o Lucas passou. Porém, quando eu chamar o método “edita” este campo deve receber a data em que foi alterado. Isso utilizando alguma solução próxima a do Lucas, sem haver necessidade de lidar diretamente com código SQL.
[quote=lhtaconi]wbdsjunior, essa solução embora válida não seria necessariamente o que preciso.
Estou utilizando VRaptor, Hibernate, portanto, nada de SQL nos códigos da minha aplicação… hehe
O campo “data de edição” receberá a data atual quando for preenchido no momento da criação, na entidade, como o Lucas passou. Porém, quando eu chamar o método “edita” este campo deve receber a data em que foi alterado. Isso utilizando alguma solução próxima a do Lucas, sem haver necessidade de lidar diretamente com código SQL.[/quote]
conheço mais a JPA que Hibernante (não se você está usando a implementação JPA do Hibernante ou Hibernante puro).
na JPA há a anotação @Version que faz isso.