Problema com DATA

19 respostas
carlos_nascimento

Pessoal no meu banco tem uma coluna chamada data e o mesmo queria quando a cada cadastro dos valores a data atual do sistema fosse no momento do cadastro fiz a formatação mas não sai no banco.

Vou postar o código para vcs entender melhor.
statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(System.currentTimeMillis());
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy");
     formataData.format(data);
     
     statement.setDate(3,credcard.getData());   
     
     statement.executeUpdate();

19 Respostas

fabiocortolan

Pq vc não coloca o valor padrão do campo data no seu banco como uma função para pegar a data atual (ex no postgres Now()) e seta o campo como “Not Null”, nesse caso qdo vc for inserir um valor e quiser a data atual basta deixá-lo em branco.
Se não for possível, tente verificar a formatação do campo q vc está inserindo no banco ou poste o erro e o banco q vc está usando.

freakazoid

A formatação do tipo de dado DATE pode ser alterada através da ferramenta que esta utilizando.

Caso o seu SGBD seja ORACLE o comando abaixo pode ser utilizado após a sessão do DB ter sido iniciada:

alter session set NLS_DATE_FORMAT = 'mm-dd-yyyy HH24:mi:ss';

Lembrando que para tal é necessário a permissão de “RESOURCE”.

Outra opção é formatar a data a partir da função TO_CHAR dentro do seu select. Segue exemplo:

SELECT TO_CHAR(SYSDATE,'dd/MM/yyyy hh24:mi:ss');

Abs!

sergiotaborda
carlos nascimento:
Pessoal no meu banco tem uma coluna chamada data e o mesmo queria quando a cada cadastro dos valores a data atual do sistema fosse no momento do cadastro fiz a formatação mas não sai no banco. Vou postar o código para vcs entender melhor.
statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(System.currentTimeMillis());
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy");
     formataData.format(data);
     
     statement.setDate(3,credcard.getData());   
     
     statement.executeUpdate();

Vc não está persistindo a variável "data". compare

statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(); // não precisa do System, o Date sabe fazer isso sozinho
     
     statement.setDate(3,data);   // não precisa formatar 
     
     statement.executeUpdate();
carlos_nascimento
Fiz o que vc mandou mas tá dando este erro:
java.lang.RuntimeException: Uncompilable source code - no suitable constructor found for Date()
sergiotaborda:
carlos nascimento:
Pessoal no meu banco tem uma coluna chamada data e o mesmo queria quando a cada cadastro dos valores a data atual do sistema fosse no momento do cadastro fiz a formatação mas não sai no banco. Vou postar o código para vcs entender melhor.
statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(System.currentTimeMillis());
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy");
     formataData.format(data);
     
     statement.setDate(3,credcard.getData());   
     
     statement.executeUpdate();

Vc não está persistindo a variável "data". compare

statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(); // não precisa do System, o Date sabe fazer isso sozinho
     
     statement.setDate(3,data);   // não precisa formatar 
     
     statement.executeUpdate();
freakazoid

Poste o código que vc fez as alterações. Provavelmente é algum pequeno detalhe que passou despercebido.

cristiano_matos

Tenta o que segue abaixo.

carlos nascimento:
statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(System.currentTimeMillis());
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy");
     formataData.format(data); // retira essa linha 
     
     -- statement.setDate(3,credcard.getData()); // retire essa linha
     ++ statement.setDate(3,formataData.format(data)); // inclui essa linha     
     
     statement.executeUpdate();
A

no Mysql eu fiz assim e deu certo:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

ps.setString(3,sdf.format(credcard.getHora()));

Geralmente os bancos aceitam data/hora como String

carlos_nascimento

Oi!!!
Tá pegando a data a há hora não??

cristiano matos:
Tenta o que segue abaixo.
carlos nascimento:
statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(System.currentTimeMillis());
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy");
     formataData.format(data); // retira essa linha 
     
     -- statement.setDate(3,credcard.getData()); // retire essa linha
     ++ statement.setDate(3,formataData.format(data)); // inclui essa linha     
     
     statement.executeUpdate();
freakazoid

Como o sergiotaborda citou, é inútil formatar a data para fazer a persistência. O banco vai grava um dado do tipo DATE e não uma String.
Dentro do DATE constam todos os dados relacionados a data - dia, mês, ano, hora, minuto, segundo e milésimo.

Se esta sentindo falta de ver a hora quando faz um select no seu banco de dados é porque provavelmente a forma de exibição não esta contemplando o horário. Aí cada banco tem um comando especifico para ajustar a exibição, eu te mandei um exemplo no Oracle.

Caso a necessidade seja gerar um relatório direto do banco você ainda pode formatar a data usando o nosso amigo TO_CHAR.

Armazene a data no DB, e para exibir o horário utilize o SimpleDateFormat como já foi citado.

Abs!

carlos_nascimento

Blz, mas o código tá desse geito:

Date data = new Date(System.currentTimeMillis());  
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy, HH:mm:ss");  
   
       
     -- statement.setDate(3,credcard.getData());  
     ++ statement.setDate(3,formataData.format(data)); // inclui essa linha       
       
     statement.executeUpdate();

E desse geito está mostrando a data correta mas a hora mostra assim 00:00:00

freakazoid:
Como o sergiotaborda citou, é inútil formatar a data para fazer a persistência. O banco vai grava um dado do tipo DATE e não uma String.
Dentro do DATE constam todos os dados relacionados a data - dia, mês, ano, hora, minuto, segundo e milésimo.

Se esta sentindo falta de ver a hora quando faz um select no seu banco de dados é porque provavelmente a forma de exibição não esta contemplando o horário. Aí cada banco tem um comando especifico para ajustar a exibição, eu te mandei um exemplo no Oracle.

Caso a necessidade seja gerar um relatório direto do banco você ainda pode formatar a data usando o nosso amigo TO_CHAR.

Armazene a data no DB, e para exibir o horário utilize o SimpleDateFormat como já foi citado.

Abs!

carlos_nascimento

O meu CGBD é o MYSQL, serio o mesmo comando???

freakazoid:
A formatação do tipo de dado DATE pode ser alterada através da ferramenta que esta utilizando.

Caso o seu SGBD seja ORACLE o comando abaixo pode ser utilizado após a sessão do DB ter sido iniciada:

alter session set NLS_DATE_FORMAT = 'mm-dd-yyyy HH24:mi:ss';

Lembrando que para tal é necessário a permissão de “RESOURCE”.

Outra opção é formatar a data a partir da função TO_CHAR dentro do seu select. Segue exemplo:

SELECT TO_CHAR(SYSDATE,'dd/MM/yyyy hh24:mi:ss');

Abs!

freakazoid
Date data= new Date(System.currentTimeMillis());
System.out.println(data.toString()); //------> Desta forma a saída fica assim: Fri Mar 08 15:08:24 GMT-03:00 2013

statement.setDate(3,data);

Dei uma olhada rápida no Google e achei isso:

http://claudiocoelho.wordpress.com/2008/03/19/formatando-data-no-mysql-com-date_format/
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

Espero que tenha ajudado.
Abs!

R
carlos nascimento:
Fiz o que vc mandou mas tá dando este erro:
java.lang.RuntimeException: Uncompilable source code - no suitable constructor found for Date()
sergiotaborda:
carlos nascimento:
Pessoal no meu banco tem uma coluna chamada data e o mesmo queria quando a cada cadastro dos valores a data atual do sistema fosse no momento do cadastro fiz a formatação mas não sai no banco. Vou postar o código para vcs entender melhor.
statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(System.currentTimeMillis());
     SimpleDateFormat formataData = new SimpleDateFormat("dd-mm-yyyy");
     formataData.format(data);
     
     statement.setDate(3,credcard.getData());   
     
     statement.executeUpdate();

Vc não está persistindo a variável "data". compare

statement.setDouble(1,credcard.getValorCartao());
     statement.setDouble(2,credcard.getValorLiquido());

     Date data = new Date(); // não precisa do System, o Date sabe fazer isso sozinho
     
     statement.setDate(3,data);   // não precisa formatar 
     
     statement.executeUpdate();

Deu erro ao voce dar new Date() ????? Qual JDK/JRE voce usa ?

pmlm

Qualquer um, desde que não faça o import!

R

java.lang.RuntimeException: Uncompilable source code - no suitable constructor found for Date()

O erro ta relacionado ao construtor.

freakazoid

Vc esta utilizando java.sql.Date ou java.util.Date???

R

freakazoid:
Vc esta utilizando java.sql.Date ou java.util.Date???

Isso! boa pergunta.

freakazoid

rof20004:
freakazoid:
Vc esta utilizando java.sql.Date ou java.util.Date???

Isso! boa pergunta.

Sempre dou preferencia para o java.util.Date e para realizar cálculos uso o Calendar.

freakazoid

Outra coisa importante!! Se você formatar a data com a mascara “dd-mm-yyyy” vai zerar o hora : minuto : segundo.

Resumindo: formate a data apenas para mostrar ao usuário final.

Abs!

Criado 3 de março de 2013
Ultima resposta 8 de mar. de 2013
Respostas 19
Participantes 8