SQLException ao inserir dados no banco

6 respostas
D

Olá a todos.

Estou com um problema para inserir os dados no banco.

public void cadastro() {
        
        float preco;
        try {
            preco = Float.parseFloat(fieldPreco.getText());
        } catch(NumberFormatException nfex) {
            JOptionPane.showMessageDialog(null, "Preencha o campo \"preço\" corretamente!\n" +nfex,
               "Erro", JOptionPane.ERROR_MESSAGE);
               return;
            }
            
        float qLitros;
        try {
            qLitros = Float.parseFloat(fieldQLitros.getText());
        } catch(NumberFormatException nfex) {
            JOptionPane.showMessageDialog(null, "Preencha o campo \"quantidade de litros\" corretamente!\n" +nfex,
               "Erro", JOptionPane.ERROR_MESSAGE);
               return;
            }
            
        new conexao();
        try {
            String tableName2 = "producaoLeite";
            con = DriverManager.getConnection("jdbc:mysql://localhost/gado", "root", "2017");
            stmt = con.createStatement();
            stmt.executeUpdate("INSERT INTO " +tableName2+ " (codGado, preco, qLitros) VALUES ('"+
              boxCod.getSelectedItem()+ "', " +preco+ ", " +qLitros+ ";");
              
            stmt.close();
            con.close();
            
            } catch(SQLException sqlex) {
                JOptionPane.showMessageDialog(null, "Erro ao cadastrar dados de produção\n" + sqlex, 
                   "Erro", JOptionPane.ERROR_MESSAGE);
            }

Visualização:

[img]http://i30.servimg.com/u/f30/11/80/81/44/cgado010.gif[/img]

[img]http://i30.servimg.com/u/f30/11/80/81/44/cgado011.gif[/img]

* O comboBox "Codigo do animal" contém dados de um select de outra tabela do banco.

* Os demais combos eu não adicionei no código que estou passando pra vocês.

Espero uma ajuda.

Obrigado.

[]s

6 Respostas

rafaelglauber

Oi,

Erro de conversão de String para Float…olha esse código abaixo:

String s = "020,00"; s = s.replace(',', '.'); Double d = new Double(s);

substitua sua virgula por ponto que deve funcionar.

kaoe

Outra opção é usar uma instancia de NumberFormat para fazer o parse assim ele usa as configurações de locale que você tem na maquina ou uma que você definir tipo pt_BR.

D
rafaelglauber:
Oi,

Erro de conversão de String para Float...olha esse código abaixo:

String s = "020,00";
          s = s.replace(',', '.');
          Double d = new Double(s);

substitua sua virgula por ponto que deve funcionar.

Eu estava usando um MaskFormatter, está errado ou devo utilizar um NumberFormat?

MaskFormatter maskPreco = new MaskFormatter("##,##");
         fieldPreco = new JFormattedTextField(maskPreco);
         
         
         MaskFormatter maskQLitros = new MaskFormatter("##,##");
         fieldQLitros = new JFormattedTextField(maskQLitros);
Tentei utilizar seu exemplo mas não tive sucesso. Aliás, acho que utilizei de forma errada:
String preco = "020,00";
          preco = preco.replace(',', '.');
          Double d = new Double(preco);
        //float preco;  // antes estava usando esta variavel
        try {
            //preco = Float.parseFloat(fieldPreco.getText());
            preco = fieldPreco.getText();
        } catch(NumberFormatException nfex) {
            JOptionPane.showMessageDialog(null, "Preencha o campo \"preço\" corretamente!\n" +nfex,
               "Erro", JOptionPane.ERROR_MESSAGE);
               return;
            }
        
            
        String qLitros = "020,00";
        qLitros = qLitros.replace(',', '.');
        Double d2 = new Double(qLitros);    
        //float qLitros;  // antes estava usando esta variavel
        try {
            qLitros = fieldQLitros.getText();
        } catch(NumberFormatException nfex) {
            JOptionPane.showMessageDialog(null, "Preencha o campo \"quantidade de litros\" corretamente!\n" +nfex,
               "Erro", JOptionPane.ERROR_MESSAGE);
               return;
            }
            
        new conexao();
        try {
            String tableName2 = "producaoLeite";
            con = DriverManager.getConnection("jdbc:mysql://localhost/gado", "root", "2017");
            stmt = con.createStatement();
            stmt.executeUpdate("INSERT INTO " +tableName2+ " (codGado, preco, qLitros) VALUES ('"+
              boxCod.getSelectedItem()+ "', " +preco+ ", " +qLitros+ ";");
rafaelglauber

Oi,

O exemplo que te mostrei foi somente para você ver o motivo do erro! Não era para utilizar…a origem do seu problema é a formatação do campo de preço. Pode usar NumberFormat ou substituir a virgula por ponto como no exemplo que te mostrei, sacou?

D

Mas como faço isso?

Eu nunca utilizei uma máscara de campos em banco de dados, só em aplicações mais simples.

Obrigado pela ajuda.

D

Não consegui resolver o problema até agora.

Alguém poderia me explicar onde está errado?

Obrigado.

Criado 5 de setembro de 2008
Ultima resposta 8 de set. de 2008
Respostas 6
Participantes 3