Problema com DATA

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.

[code]
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();[/code]

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.

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!

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

[code]
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();[/code]

Fiz o que vc mandou mas tá dando este erro:

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

[quote=sergiotaborda][quote=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.

[code]
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();[/code]

[/quote]

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

[code]
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();[/code]

[/quote]

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

Tenta o que segue abaixo.

[quote=carlos nascimento]

[code]
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();[/code][/quote]

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

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

[quote=cristiano matos]Tenta o que segue abaixo.

[quote=carlos nascimento]

[code]
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();[/code][/quote][/quote]

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!

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

[quote=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!

[/quote]

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

[quote=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![/quote]


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!

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

[code]
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();[/code]

[/quote][/quote]

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

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

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

O erro ta relacionado ao construtor.

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

[quote=freakazoid]Vc esta utilizando java.sql.Date ou java.util.Date???

[/quote]

Isso! boa pergunta.

[quote=rof20004][quote=freakazoid]Vc esta utilizando java.sql.Date ou java.util.Date???

[/quote]

Isso! boa pergunta.[/quote]

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

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!