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!
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.
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 02055123034 será salvo como 2055123034 no seu banco de dados (o que é um valor totalmente diferente)
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: "111.111.111-11"
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.
CPF não pode ser campo inteiro.
Um CPF pode começar com zero e tipos númericos não tem zeros à esquerda.
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?
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.
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.