CRUD - Inserindo um CPF

7 respostas Resolvido
javaprogramação
A

Boa Noite!

Estou tentando fazer um CRUD e estou com um pequeno problema.

private void btnInserirActionPerformed(java.awt.event.ActionEvent evt) {                                           
        ClienteDAO cd = new ClienteDAO();
        Cliente cliente = new Cliente();
        cliente.setNome(txtNomeCliente.getText());
        cliente.setSobrenome(txtsobrenomeCliente.getText());
        cliente.setEmail(txtEmail.getText());
        cliente.setCpf(txtCpf.getText());
    }

Eu tenho este metodo para inserir um cliente no banco de dados, todavia, o CPF esta sendo pego de um campo de texto da biblioteca Swing e esta dando erro, como eu posso arrumar ou transformar esse campo em inteiro para poder envia-lo ao banco de dados?

Obrigado!

7 Respostas

M

Converte o texto para número.
cliente.setCpf(Integer.parseInt(txtCpf.getText()));

Mas lembre-se de validar se a sua string é mesmo um número ou isso vai lançar uma NumberFormatException.

M

Mais uma coisa: o ideia não é salvar como número no seu banco de dados pois há CPF que começa em 0.

o CPF [telefone removido] será salvo como [telefone removido] no seu banco de dados (o que é um valor totalmente diferente)

A

Entendi a questãod o banco de dados e irei fazer estas validações. Tentei realizar o parse agora e o java esta em retornando uma Exception

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "[CPF removido]"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)

O código com o Parse ficou o seguinte

ClienteDAO dao = new ClienteDAO();
       
       Cliente cliente = new Cliente();
       cliente.setNome(txtNomeCliente.getText());
       cliente.setSobrenome(txtsobrenomeCliente.getText());
       cliente.setEmail(txtEmail.getText());
       cliente.setCpf(Integer.parseInt(txtCpf.getText()));
       cliente.setTelefone(Integer.parseInt(txtTelefone.getText()));
       cliente.setEndereco(txtEndereco.getText());
       
        try {
            dao.salvar(cliente);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(PrincipalFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

O erro pode estar sendo ocasionado por causa da mascara colocada no txtField?
Primeiro CRUD que tento fazer, desculpe se alguma pergunta soar idiota.

S

CPF não pode ser campo inteiro.
Um CPF pode começar com zero e tipos númericos não tem zeros à esquerda.

A

Eu tentei converter para um double mas também deu um erro, nesse caso eu uso o Tipo String mesmo tanto no banco quanto no Java, ou teria algum outro jeito de fazer a conversão?

S

Pôxa, double também é um tipo numérico.
Um CPF não é um campo numérico, pois ele pode começar com zero.
Um CPF é String.

H
Solucao aceita

Não converta

Como já disseram, CPF não é um número. Você não faz operações matemáticas com o CPF, ele não representa uma quantidade, nem nada disso.

O CPF é uma informação descritiva: é um identificador que por acaso usa dígitos. Mas ele não é um número, e não deve ser tratado como tal.

Um dos motivos principais (não é o único) é que ele pode começar com zero. Mas números não são assim, então se você tiver uma string como “012345678” e converter para número (seja int, double, ou o que for), ele se transforma em 12345678. E remover este zero da frente pode ter consequências graves no mundo real.

Enfim, não converta, deixe-o como String no Java (e no banco, como VARCHAR). Leia mais sobre o assunto aqui.

Criado 18 de novembro de 2020
Ultima resposta 18 de nov. de 2020
Respostas 7
Participantes 4