Date null, erro!

Pessoal

Já pesquisei no forum, achei os codigos… mas mesmo assim ainda nao consegui usar eles.

Tenho os jFormattedTextField no formulario, para o tipo data
só que se eu nao quiser preencher, tem q ficar em branco e receber null no banco, certo?
só que eu estou achando jeito pra isso

[code] Date emissao;

        if (txtEmissao1.getText().length() == 0){
        emissao = null;
        }
        else{
        emissao = new SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());
        }[/code]
cad.setEmissao(emissao);

ERRO:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Será que não está vindo null no seu getText() não ? Tenta fazer assim:

 if (txtEmissao1.getText() == null){ 
   emissao = null;  
 }

[quote=breno500as]Será que não está vindo null no seu getText() não ? Tenta fazer assim:

if (txtEmissao1.getText() == null){ emissao = null; } [/quote]

Pois é, mas ai da este erro

SEVERE: null java.text.ParseException: Unparseable date: ""

[quote=breno500as]Será que não está vindo null no seu getText() não ? Tenta fazer assim:

if (txtEmissao1.getText() == null){ emissao = null; } [/quote]

Se eu nao me engano isso ai nao vai testar nada, só vai dar nullpointer de novo se for null

pra testar se estar vazio faça:

 if (txtEmissao1.getText().isEmpty()){ 
   emissao = null;  
 }

tenta ai do jeito que eu postei

Sem a exceção inteira fica dificíl saber onde estava o null pointer…

Entao, nos 2 jeito ai se eu colocar uma data, ele cadastra corretamente
ta dando erro mesmo só se nao colocar nada

ERRO:
se eu clico na linha do erro “at obras.dao.ContratoDao.adiciona(ContratoDao.java:90)”
me leva ao meu DAO e aponta para esta linha

stmt.setDate(12, new Date(c1.getEmissao().getTime()));

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at obras.dao.ContratoDao.adiciona(ContratoDao.java:90) at obras.forms.cadastrar.CadContratos.cadastro(CadContratos.java:794) at obras.forms.cadastrar.CadContratos.btnGravarActionPerformed(CadContratos.java:663) at obras.forms.cadastrar.CadContratos.access$000(CadContratos.java:38) at obras.forms.cadastrar.CadContratos$1.actionPerformed(CadContratos.java:195) 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:272) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) 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)

Olha, é o Mr Bean… :smiley:

Posta a sua classe ContratoDao

era pra ser Mr. Beans!
rs…

[code]public void adiciona(CadContrato c1) throws SQLException, ParseException
{
//Prepara a conexão
String sql = “INSERT INTO cad_contratos (id_obra,id_contrato,contratada,servico,budget,”+
“valor_contrato,valor_fat_direto,valor_sinal,reter_sinal,ret_contratual,cadastro,emissao,anexo)”+
“VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)”;
PreparedStatement stmt = conexao.prepareStatement(sql);

    //Preenche os valores
    stmt.setString(1, c1.getObra());
    stmt.setString(2, c1.getId_contrato());
    stmt.setString(3, c1.getContratada());
    stmt.setString(4, c1.getServico());
    stmt.setDouble(5, c1.getBudget());
    stmt.setDouble(6, c1.getValor_contrato());
    stmt.setDouble(7, c1.getValor_fat_direto());
    stmt.setDouble(8, c1.getValor_sinal());
    stmt.setBoolean(9, c1.getReter_sinal());
    stmt.setFloat(10, c1.getRet_contratual());
    stmt.setDate(11, new Date(c1.getCadastro().getTime()));
    stmt.setDate(12, new Date(c1.getEmissao().getTime()));
    //stmt.setDate(8, new Date(c1.getTermino_previsto().getTime()));
    //stmt.setDate(9, new Date(c1.getEnvio_juridico().getTime()));
    //stmt.setDate(10, new Date(c1.getRetorno_assinado().getTime()));
    //stmt.setDate(11, new Date(c1.getEncerramento().getTime()));
    //stmt.setString(12, c1.getObservacoes());
    stmt.setBlob(13, c1.getAnexo());

    //Executa e fecha
    stmt.execute();
    stmt.close();
}[/code]

Qual dessas linhas… é a linha 90 no seu arquivo???

é essa

stmt.setDate(12, new Date(c1.getEmissao().getTime()));

Tem duas opcoes…

ou

c1 tá null

ou c1.getEmissao tá null…

veja aí no seu algorítmo… qual tá sendo null e aí vc consegue resolver…

não entendi, como assim o c1 null?
ai embaixo tem a outra classe, tem mais variaveis, mas eu tirei aqui pra postar pq se nao ia ficar grande

[code]public class CadContrato {

private Date emissao;

public Date getEmissao() {
    return emissao;
}

public void setEmissao(Date emissao) {
    this.emissao = emissao;[/code]

Carinha, eu acho que nessa linha:

    emissao = new  SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());  

o seu txtEmissao.getText() está retornando “”. Por isso a data não é “parseada”. Por que está vindo em branco.

[quote=emmanuelrock]Carinha, eu acho que nessa linha:

    emissao = new  SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());  

o seu txtEmissao.getText() está retornando “”. Por isso a data não é “parseada”. Por que está vindo em branco.[/quote]

Creio que nao, sabe pq?
pq se eu coloco uma data, ele aceita e cadastra normalmente.

no meu banco de dados (MySQL) esta por padrao assim:

Tipo: date
Nulo: sim
Padrão: NULL

tem alguma coisa a ver?

Já tentou isso:

 if  (txtEmissao1.getText()==null || txtEmissao1.getText().equals("")){  
     emissao = null;  
 }else{  
     emissao = new SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());  
 }  

Depois tenta fazer um insert manual no banco, e veja se o campo date pode receber null ou deve receber “”.

[quote=rafa120]no meu banco de dados (MySQL) esta por padrao assim:

Tipo: date
Nulo: sim
Padrão: NULL

tem alguma coisa a ver?[/quote]

Não…

Eu estou enganado ou você está com exceções diferentes ?? :slight_smile:

A melhor forma de se descobrir isto é depurar seu código, para saber onde está o erro e tratalo…

Se você está com null pointer, faça da forma que falei no primeiro post…Teste antes para ver se o objeto está null para depois acessar seus membros (getText(),getEmissao(),getTime())…Inclusive no seu CadastroDAO na linha 90…

Agora erro de ParseException é como nosso amigo falou acima…Você não pode dar um parse em uma String vazia “”, seria interessante você testar antes tbm:

  if(!minhaString.equals("")){
        //faça...
   }

Deixa eu ir almoçar… :lol: … Boa sorte aí cara…

emmanuelrock eu já tinha tentando tb com este seu exemplo, mas tb fica no mesmo erro

entao, para depurar nao é ctrl+shift+f5 ? ou estou pipocando?
ao apertar isso, aparece esta msg
Não há variáveis a serem exibidas porque não há thread atual
tipo null
valor null

no mesmo formulario, eu tenho campos do tipo numerico (double) que tb se nao preencher, insera o valor 0… e funciona direitinho

[code]
double budgett;
if (txtBudget.getText().length()==0){
budgett = 0;
}
else{
budgett = Double.parseDouble(txtBudget.getText());

        cad.setBudget(budgett);[/code]