Inserir no banco de dados um Double de um JTextField JAVADB

8 respostas Resolvido
javasql
D

Olá, Estou com um problema ao inserir dados double no banco de dados, quando coloco tudo String vai numa boa, uso java, e o banco de dados é JAVADB(Derby), seguem abaixo meus códigos.

SEGUE ABAIXO O CÓDIGO QUE ESTÁ NO MEU BOTÃO DE SALVAR DO JFRAME

if(!jFCnpj.getText().equals("") && !jTRazaoSocial.getText().equals("") ){
        ModeloEmpresas empresa = new ModeloEmpresas(); 

        try{//captura erros
            empresa.setCnpj(Double.parseDouble(jFCnpj.getText()));
            empresa.setTelefone(Integer.valueOf(jTTelefone.getText()));
            empresa.setInscricaoestadual(Integer.valueOf(jTInscricaoEstadual.getText()));
            
            conecta.salvar();
            
                            
            conecta.manager.getTransaction().begin();//começa a conexão do banco de dados JavaDB(Derby) pela persistência JPA
            conecta.manager.persist(empresa);//cadastra no banco de dados as variáveis da classe Usuario
            conecta.manager.getTransaction().commit();//termina a conexão do banco de dados JavaDB(Derby) pela persistência JPA

            //exibe uma mensagem para o usuário ao cadastra o Usuário no banco de dados
            JOptionPane.showMessageDialog(null, "Empresa Cadastrado com Sucesso!");

        }catch(HeadlessException e){//capta uma exceção de erro se ocorrer um erro ao salvar os dados no banco de dados

            //exibe uma mensagem de erro para o usuário se ocorrer um erro ao cadastrar os dados no banco de dados
            JOptionPane.showMessageDialog(null, "erro ao alterar dados "+e);
        }//fim do try catch

        //chama o método de limpar os dados dos JTextField
        limpar();

        //chama o método para carregar os dados do banco de dados na tabela jTable1
        preencherTabela("select * from EMPRESA order by CNPJ");
        
    }else{
        //mostra a mensagem abaixo para que o usuário preencha os dados corretamente
        JOptionPane.showMessageDialog(null, "Favor preencher o cadastro completo!!");
    }//fim do if else

}

SEGUE ABAIXO MINHA CLASSE ModeloEmpresas AONDE FAÇO A INICIAÇÃO DAS VARIÁVEIS
package Modelo;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="ROOT.EMPRESA")
public class ModeloEmpresas implements Serializable {

@Id
@Column(name = "CNPJ", nullable = false)
private double cnpj;

@Column(name = "TELEFONE", nullable = false)
private int telefone;

@Column(name = "INSCRICAOESTADUAL", nullable = false)
private int inscricaoestadual;

public double getCnpj() {
    return cnpj;
}

public void setCnpj(double cnpj) {
    this.cnpj = cnpj;
}

public int getTelefone() {
    return telefone;
}

public void setTelefone(int telefone) {
    this.telefone = telefone;
}

public int getInscricaoestadual() {
    return inscricaoestadual;
}

public void setInscricaoestadual(int inscricaoestadual) {
    this.inscricaoestadual = inscricaoestadual;
}



public ModeloEmpresas(){}

}

SEGUE ABAIXO O ERRO

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: multiple points
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1914)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at Visao.Cadastro_Empresa.jBSalvarActionPerformed(Cadastro_Empresa.java:289)
at Visao.Cadastro_Empresa.access$200(Cadastro_Empresa.java:22)
at Visao.Cadastro_Empresa$3.actionPerformed(Cadastro_Empresa.java:120)

8 Respostas

R

Ola, e qual o valor que vc está digitando EXATAMENTE pra salvar?

D

no JTextField? qualquer número, tentei agora 12839036000142, o CNPJ está com uma mascara assim ##.###.###/####-##, mas no campo telefone esta sem mascara e ainda assim da erro.

R

É que seu problema não está exatamente no banco, está dando erro na hora de converter pra Double.
empresa.setCnpj(Double.parseDouble(jFCnpj.getText()));
Quando vc faz isso, não pode deixar a String vazia, nem nula e deve ser um número válido, n ocaso com 1 ponto apenas (vírgula não).

R
Solucao aceita

Ai que está, vc tenta converter um CNPJ formatado pra double, isso não é um double, não pode.
Não pratico e não recomendo armazenar cnpj, cpf, telefone, nem número de casa como Numerico no banco.
Só uso numérico quando é um valor que será usado para cálculos.

D

Legal Rodrigo, como não tenho muita experiência achei que era justamente o contrário, se caso eu precisasse fazer uma validação desde CNPJ, não causaria problemas futuros?

R

Não

R

Só pra constar, se tentar converter um telefone válido com ddd para Integer, vai bugar, o valor é muito longo para um int, teria que ao menos usar Long

D

Ok muito bem colocado, mais se não tiver problemas em utilizar String nesses campos, a programação fica até mais fácil.

Criado 5 de outubro de 2017
Ultima resposta 5 de out. de 2017
Respostas 8
Participantes 2