Pegar Data JDateChooser

14 respostas
J

Estou precisando de uma ajuda pois nunca usei JDateChoose
Estou tentando pegar a data de um JDateChoose e gravar no banco firebird como Date mesmo mas não estou conseguindo esta dando um erro falando que não esta conseguindo converter a String “Sat Jan 02 00:14:10 BRST 2010”
Estou tentando gravar assim:
o JDateChoose é a Variavel jf_Date.getDate()

try{

String sqlInsert = INSERT INTO CAIXA (ID_CONTA, DESCRICAO, TIPO, DATA, VALOR) VALUES " + “(’”+tf_Conta.getText()+”’,’"+tf_Descricao.getText()+

“’,’”+jc_Tipo.getSelectedItem()+"’,’"+jf_Data.getDate()+"’,’"+tf_Valor.getText()+"’)";

con_Caixa.stmt.executeUpdate(sqlInsert);

JOptionPane.showMessageDialog(null,Cadastro Efetuado com Sucesso!);

}

catch(SQLException erro)

{

JOptionPane.showMessageDialog(null,Cadastro não efetuado+erro);

}

14 Respostas

dm_thiago

No seu SQL, ele está tentando salva a data colocando ela no formato “Sat Jan 02 00:14:10 BRST 2010”
Para gravar no banco, coloque a data no formato yyyy-MM-dd. Para isso, você pode usar a classe DateFormat.

J

Como eu faço para formatar?
você pode me dar um exemplo?

dm_thiago
Date date = new Date(); 
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(date));
ViniGodoy

Oi juninhon1. Sempre que postar código, use as tags code, assim:

seu código

Senão fica difícil de ler.

J

OK dm_thiago
dessa forma eu consigo gravar essa variavel date no meu banco de dados?

vou fazer o teste e posto o resultado.

Obrigado.

ViniGodoy

O ideal mesmo é você usar PreparedStatement, e parar de se incomodar com o formato do banco de dados. Com o PreparedStatement, é possível usar a data diretamente.
Além disso, o PreparedStatement te livra do problema de SQL Injection, ao qual o seu código está sujeito. Finalmente, é bom citar que as queries usando o PreparedStatement ficam muitíssimo mais fáceis de ler.

J

Como eu uso o PreparedStatement
Você pode me passar um exemplo?

dm_thiago

Se você colocar “prepared statement java” no google, ele já te mostra vários exemplos. Alem de ser mais fácil do que postar a pergunta aqui e bem mais rápido do que esperar alguem responder.

http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
http://www.guj.com.br/article.show.logic?id=115

J

Consegui fazer de uma forma mas no banco esta como varchar e não como date
mas se eu transformo como data a data sai errado por exemplo:
eu puxo a data do windows
se eu não converter grava a data certo mas se eu converter
ele puxa a data errado por exemplo:
28.55.2010

Alguem sabe o porque?
o codigo é o seguinte

Date data = new Date();
        DateFormat df = new SimpleDateFormat("dd.mm.yyyy");
        jf_Data.setText(df.format(data));
        
    try{
        String sqlInsert = "INSERT INTO CAIXA (ID_CONTA, DESCRICAO, TIPO, DATA, VALOR) VALUES " + "('"+tf_Conta.getText()+"','"+
                tf_Descricao.getText()+"','"+jc_Tipo.getSelectedItem()+"','"+jf_Data.getText()+"','"+tf_Valor.getText()+"')";
            con_Caixa.stmt.executeUpdate(sqlInsert);
            JOptionPane.showMessageDialog(null,"Cadastro Efetuado com Sucesso!");
        }
    catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null,"Cadastro não efetuado"+erro);
        }
dm_thiago
juninhon1:
Consegui fazer de uma forma mas no banco esta como varchar e não como date mas se eu transformo como data a data sai errado por exemplo: eu puxo a data do windows se eu não converter grava a data certo mas se eu converter ele puxa a data errado por exemplo: 28.55.2010

Alguem sabe o porque?
o codigo é o seguinte

Date data = new Date();
        DateFormat df = new SimpleDateFormat("dd.mm.yyyy");
        jf_Data.setText(df.format(data));
        
    try{
        String sqlInsert = "INSERT INTO CAIXA (ID_CONTA, DESCRICAO, TIPO, DATA, VALOR) VALUES " + "('"+tf_Conta.getText()+"','"+
                tf_Descricao.getText()+"','"+jc_Tipo.getSelectedItem()+"','"+jf_Data.getText()+"','"+tf_Valor.getText()+"')";
            con_Caixa.stmt.executeUpdate(sqlInsert);
            JOptionPane.showMessageDialog(null,"Cadastro Efetuado com Sucesso!");
        }
    catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null,"Cadastro não efetuado"+erro);
        }

Teu erro está aqui:

DateFormat df = new SimpleDateFormat("dd.mm.yyyy");

'mm', em minusculo, quer dizer minutos.
'MM', em maiusculo, quer dizer meses.
E como o Vini falou, você devia usar prepared statement

J

Deu certo agora, realmente era esse erro mesmo.

Muito Obrigado.

T

Estou com o mesmo problema e não consigo resolver!

A minha solução era:

//Date do tipo Java.sql.Date
Date d = new Date(jDateChooserObra.getDate().getYear(),
					jDateChooserObra.getDate().getMonth(),
					jDateChooserObra.getDate().getDay());
		
			
			ret  = repair.insert(d, client, car, getJCheckBoxPay()
					.isSelected(), getDetailsTableModel().getList(),
					Long.parseLong(jFormattedTextFieldKm.getText().trim()), getDetailsTableModel().getTotal());

Mas o getDay() não funciona!

Agora estou a tentar usar a seguinte:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
Date d = df.format(jDateChooserObra.getDate());  
		
			
ret  = repair.insert(d, client, car, getJCheckBoxPay()
	.isSelected(), getDetailsTableModel().getList(),
	Long.parseLong(jFormattedTextFieldKm.getText().trim()), getDetailsTableModel().getTotal());

Mas não sei como converter esta string para Date.

df.format(jDateChooserObra.getDate());

Obrigado

T

[color=red] Já consegui! [/color]
Resolvi da seguinte forma!

DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); java.sql.Date d = null; try { d = new java.sql.Date(df.parse(df.format(jDateChooserObra.getDate())).getTime()); } catch (ParseException e) { JOptionPane.showMessageDialog(rootPane, "Introduza a data correcta", "ERRO", JOptionPane.ERROR_MESSAGE); }

C

Ai galera soou iniciante em java e gostaria de saber como criar uma tela moldal
do tipo que quando eu abrisse ela as outras ficassem bloqueadas

Criado 28 de janeiro de 2010
Ultima resposta 16 de jul. de 2012
Respostas 14
Participantes 5