Gravar jDataChooser vazio em SQL

Boa Tarde!
Uso Um JDataChooser para pegar a data (dd/MM/yyyy).
Ultilizo as seguintes Funcoes Para pegar Essa Data:

[code] public static SimpleDateFormat fdata = new SimpleDateFormat(“dd/MM/yyyy”); // para pegar somente a Data

String d_nasc = data.fdata.format(jd_nascimento.getDate());

[/code]

Mais em Alguns casos preciso Grava isso No SQL vazio…
Custumo usar a seguinte função para textar vazio no JTextField:

  public static String vazio(String var){

    if (var.isEmpty()){
    var = null; 
    return var;
    } 
    
     else
     return var;

     }

Mais Com Date não Funciona… O que posso fazer?

samuk Boa Noite!

Não entendi a sua dúvida, você quer gravar vazio no banco ou está gravando vazio?

BOa Noite André… Estou Tentando Gravar Vazio!
Desculpe se fui confuso!

Ninguem Nunca teve esse Tipo De Problema?

Ex: Uma Tela De CAdastro de Cliente e o Usuario prefere não colocar a Data de Nascimento!

Faz uma verificação, removendo espaços e removendo as barras se for nulo quer dizer que o usuário não preencheu nada. Aí seta o valor nulo para a variável. No seu banco a coluna data pode ser vazia?

Bom Dia Danilo, Obrigado Por Responder…

Estou Usando JDBC com Acess, e aceita grava vazio Sim.

Em Relação ao verificar se está vazio eu uso uma rotina para JtextField:

[code] public static String vazio(String var){

  if (var.isEmpty()){  
  var = null;   
  return var;  
  }   
    
   else  
   return var;  
  
   }  

[/code]

Mais Ela não Funciona Pra jDataChooser… Acho que por ser do Tipo Date.

Qunado tento gravar no Banco de dados da o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.util.Calendar.setTime(Calendar.java:1075)
        at java.text.SimpleDateFormat.format(SimpleDateFormat.java:876)
        at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869)
        at java.text.DateFormat.format(DateFormat.java:316)
        at telas.cadastro_clientes.update(cadastro_clientes.java:1123)
        at telas.cadastro_clientes.botao_salvarActionPerformed(cadastro_clientes.java:823)
        at telas.cadastro_clientes.access$200(cadastro_clientes.java:14)
        at telas.cadastro_clientes$3.actionPerformed(cadastro_clientes.java:529)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
        at java.awt.Component.processMouseEvent(Component.java:6216)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5981)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4583)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Abraços…

Esse erro dá quando você seta vazio né?
O que eu sugeri é assim, faz uma verificação se for vazio já seta vazio direto, sem fazer a conversão. do simpleDateFormat eu acredito que o erro seja por isso.

Certo… Para fazer o Teste Coloquei “Null” direto.
Dai Aparece o erro Java.sql.SQLException: Tipo de dados incompativel na expressão de criterio.

Acho por que não se usa “Null” em Date.

Mais qual eu uso?

E como eu posso verificar se o date é vazio??? Normalmente eu uso " .isEmpty" , Mais com Date não Aceita…

Abraçosssss

O Null do Date seria preencher tudo com 0

Se eu preencho tudo com 0 (zero) Ele grava a data 31/12/1969…

Talvez seja uma configuração Padrao do Access…

Vou Pesquisar nos documentos do access, qual o caracter que ele grava vazio… Ou…

Se eu mudar o campo de Date pra Texto…

O que eu perco com isso?

A meu ver não perde em nada. Pois quando você converte e armazena em uma variavel Date ou GregorianCallendar ele já faz as verificações, por exemplo se digitar mês 13 vai para janeiro do ano seguinte.

Mudar o Campo Do Access ão ia ser muito Pratico, Pois toda vez que fosse Ler Ia ter que fazer um String to Date e ao gravar um Date to String!

Dai Depois de muito Pesquisar descobri qual era o problema.

Ao gravar algum valor eu uso:

"UPDATE membros SET data_nasc = ' "+null+"' where codigo ='"+tf_codigo.getText()+"'"; 

Ao Tentar Garvar Null eu fazia isso entre Aspas simples…

Mais So da certo sem as Aspas Simples. Assim:

"UPDATE membros SET data_nasc = null where codigo ='"+tf_codigo.getText()+"'"; 

Sofri mais Consegui!!!

Obrigado a Todos! :smiley:

samuk, boa noite

Desculpa a demora para responder…mas só uma dúvida, entendo que esse campo não é obrigatório, se ele não é obrigatório porque você está colocando ele no INSERT?

Exemplo:

String sql = "INSERT INTO TESTE (campos) VALUES (valores)";

Não necessariamente na parte de “campos” precisa conter todos os campos da tabela, sendo assim, ele só irá conter os campos not-null, e se o campo data estiver vazio ou null, ele não estará na parte dos campos…

Entendeu?