Erro: converter string para double e armazenar em mysql

13 respostas
marcusluiz83

Boa tarde!

Como faço para converter uma string para double e armazenar este valor em um banco de dados mysql?

formatei o campo de texto da seguinte forma:

java.text.DecimalFormat decimal = new java.text.DecimalFormat("#,###,###.00");
javax.swing.text.NumberFormatter numFormatter = new javax.swing.text.NumberFormatter(decimal);
numFormatter.setFormat(decimal);
numFormatter.setAllowsInvalid(false);
javax.swing.JFormattedTextField jFormattedTextField1 = new javax.swing.JFormattedTextField();
jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(numFormatter));
jFormattedTextField1.setHorizontalAlignment(javax.swing.JTextField.TRAILING);

e o método para armazenar no banco de dados:

private void gravarVenda() {


        try {
            VendasConvenio venda = new VendasConvenio();
            venda.setCodigoEmpresa(Integer.parseInt(codigoLoja.getText()));
            venda.setNumeroCartao(Integer.parseInt(numeroCartao.getText()));
            venda.setValorCompra(Double.parseDouble(jFormattedTextField1.getText()));
            venda.setNumeroParcelas(Integer.parseInt(numeroParcelas.getText()));
            venda.setTaxaJuros(Double.parseDouble(taxaJuros.getText()));
            venda.setValorJuros(Double.parseDouble(valorJuros.getText()));
            venda.setValorParcela(Double.parseDouble(valorParcela.getText()));
            VendasConvenioDao dao = new VendasConvenioDao();
            dao.registraVenda(venda);
            JOptionPane.showMessageDialog(null, "Venda registrada com sucesso!");
            System.exit(1);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro!");
        }
    }
}

Quando executo, a formatação no campo acontece, mas dá o seguinte erro na hora de salvar

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
        at java.lang.Double.parseDouble(Double.java:510)
        at forms.FormVendasConvenio.gravarVenda(FormVendasConvenio.java:158)
        at forms.FormVendasConvenio.jButton1ActionPerformed(FormVendasConvenio.java:125)
        at forms.FormVendasConvenio.access$100(FormVendasConvenio.java:26)
        at forms.FormVendasConvenio$2.actionPerformed(FormVendasConvenio.java:69)
        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.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:2478)
        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)
CONSTRUÍDO COM SUCESSO (tempo total: 15 segundos)

Qual a caca que estou fazendo?

Obrigado!

13 Respostas

rafaelbortoletto

Pelo erro de empty string, aparentemente, você esqueceu de preencher um campo obrigatório.

marcusluiz83

Cara, isso que tá me arrebentando. Eu não esqueço de preencher nenhum campo. Continuo quebrando a cabeça aqui, e descobri que o problema está na formatação do campo valorCompra, que está com DecimalFormat. Se eu tiro esta formatação, consigo gravar a venda.

O problema é que preciso desta funcionalidade de formatar automaticamente o valor inserido neste campo para o formato decimal. Por exemplo, se eu digito 10 formata para 10,00.

Alguém pode me ajudar?

Obrigado!

marcusluiz83

Bom dia!

Sim, de fato, não nomeei este campo adequadamente, só que o código do jeito que postei aqui, formata o valor do jeito que preciso, só que dá este erro. Se eu tirar esta formatação, eu consigo gravar.

java.text.DecimalFormat decimal = new java.text.DecimalFormat("#,###,###.00");
javax.swing.text.NumberFormatter numFormatter = new javax.swing.text.NumberFormatter(decimal);
numFormatter.setFormat(decimal);
numFormatter.setAllowsInvalid(false);
javax.swing.JFormattedTextField jFormattedTextField1 = new javax.swing.JFormattedTextField();
jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(numFormatter));
jFormattedTextField1.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
marcusluiz83

Amigão, obrigado pela ajuda! Só me confirme, por favor uma dúvida em relação à sua sugestão: este método seria alterado neste código:

private void gravarVenda() {


        try {
            VendasConvenio venda = new VendasConvenio();
            venda.setCodigoEmpresa(Integer.parseInt(codigoLoja.getText()));
            venda.setNumeroCartao(Integer.parseInt(numeroCartao.getText()));
            venda.setValorCompra(Double.parseDouble(jFormattedTextField1.getText())); // A alteração será nesta linha, certo?
            venda.setNumeroParcelas(Integer.parseInt(numeroParcelas.getText()));
            venda.setTaxaJuros(Double.parseDouble(taxaJuros.getText()));
            venda.setValorJuros(Double.parseDouble(valorJuros.getText()));
            venda.setValorParcela(Double.parseDouble(valorParcela.getText()));
            VendasConvenioDao dao = new VendasConvenioDao();
            dao.registraVenda(venda);
            JOptionPane.showMessageDialog(null, "Venda registrada com sucesso!");
            System.exit(1);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro!");
        }
    }
}

E não no JFormattedTextField, é isso mesmo?

Obrigado!

marcusluiz83

Desculpe pela demora, estava no trampo…

Enfim, segui sua sugestão, e esbarrei no erro:

method parseDouble in class java.lang.Double cannot be applied to given types
required: java.lang.String
found: java.lang.Object

Não faço ideia de como arrumar isto. Alguma sugestão?

Agradeço pelas ajudas!

marcusluiz83

Fiz uma alteração que compilou sem problemas:

venda.setValorCompra(Double.parseDouble(jFormattedTextField1.getValue().toString())); // Acrescentei .toString()

Mas me retornou o erro ao tentar gravar:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at forms.FormVendasConvenio.gravarVenda(FormVendasConvenio.java:168)
        at forms.FormVendasConvenio.jButton1ActionPerformed(FormVendasConvenio.java:135)
        at forms.FormVendasConvenio.access$100(FormVendasConvenio.java:36)
        at forms.FormVendasConvenio$2.actionPerformed(FormVendasConvenio.java:79)
        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.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:2478)
        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)
CONSTRUÍDO COM SUCESSO (tempo total: 17 segundos)

Alguma ideia?

Adelar

Conseguiu resolver o problema?

Att.

marcusluiz83

Bom dia!

Ainda não consegui. Esbarrei na tela do meu último post. Tô completamente sem ideias. A formatação do campo acontece, só não grava no meu banco…
:cry:

nel

marcusluiz83:
Fiz uma alteração que compilou sem problemas:

venda.setValorCompra(Double.parseDouble(jFormattedTextField1.getValue().toString())); // Acrescentei .toString()

Mas me retornou o erro ao tentar gravar:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at forms.FormVendasConvenio.gravarVenda(FormVendasConvenio.java:168)
        at forms.FormVendasConvenio.jButton1ActionPerformed(FormVendasConvenio.java:135)
        at forms.FormVendasConvenio.access$100(FormVendasConvenio.java:36)
        at forms.FormVendasConvenio$2.actionPerformed(FormVendasConvenio.java:79)
        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.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:2478)
        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)
CONSTRUÍDO COM SUCESSO (tempo total: 17 segundos)

Alguma ideia?

Aposto que se você der um System.out.println() nesta variavél jFormattedTextField1.getValue() o resultado é um ‘null’.
Na minha opinião, é duas opções:

1 - o campo jFormattedTextField1 é nulo
2 - o campo jFormattedTextField1.getValue() retorna um valor nulo.

Se não for uma desta opções, verifica as linhas citadas no stacktrace nas tuas classes. NullPointerException é como se você estivesse fazendo algo assim:

null.toString()

Ou…null.getValue().

Verifique estas questões :slight_smile:

Abraços

marcusluiz83

Bom dia, amigo!

O código está no pc de minha casa, verificarei mais tarde e lhe respondo. Realmente, acho que está retornando um valor nulo. Se eu tiro o código do jFormattedTextField, eu consigo gravar no meu banco, por isso .

Abraço!

WellingtonRamos

A pergunta aqui é, vc está obtendo o valor do objeto correto?

Todos os teus JTextFields estão nomeados adequadamente exceto esse do valor de compra (jFormattedTextField1).

WellingtonRamos

Verifique por getValue() se vc consegue.

Lembro que tive alguns problemas com a obtenção de valor em JFormattedTextFields mas não lembro exatamente, mas é algo relacionado ao momento em que cada um dessese métodos possui o valor correto (ou melhor, internamente ao componente, as variáveis são atualizadas).

WellingtonRamos

isso.

Criado 29 de agosto de 2010
Ultima resposta 30 de ago. de 2010
Respostas 13
Participantes 5