Erro na edição de usuário

Sou um inexperiente em Java. Fiz um programa utilizando JFrame dom JInternalFrames. No banco de dados eu coloquei tudo como varchar:

codigo serial NOT NULL,
nome character varying(100),
dt_nasc character varying(100),
telefone character varying(100),
endereco character varying(100),
rg character varying(100),
cpf character varying(14),
nacionalidade character varying(100),
religiao character varying(100),
nome_pai character varying(100),
telefone_pai character varying(100),
email_pai character varying(100),
nome_mae character varying(100),
telefone_mae character varying(100),
email_mae character varying(100),
especialidades character varying(800),
classes character varying(100)

Na hora de fazer o registro acorre tudo bem, porém na hora de editar um dos contatos dá o seguinte erro:

Estou com suspeitas de que seja nesta parte do código da janela de edição de usuário:

public void editarDesbravadores() {
String sql = “Update desbravadores set nome = ?, dt_nasc = ?, telefone = ?, endereco = ?, rg = ?, cpf = ?, nacionalidade = ?, religiao = ?, nome_pai = ?, telefone_pai = ?, email_pai = ?, nome_mae = ?, telefone_mae = ?, email_mae = ?, especialidades = ?, classes = ? where codigo = ?”;
try {
pst = conecta.prepareStatement(sql);
pst.setString(1, txtNome.getText());
pst.setString(2, txt_DataNasc.getText());
pst.setString(3, txtTelefone.getText());
pst.setString(4, txtEndereco.getText());
pst.setString(5, txtRG.getText());
pst.setString(6, txtCPF.getText());
pst.setString(7, txtNacionalidade.getText());
pst.setString(8, txtReligiao.getText());
pst.setString(9, txtNomePai.getText());
pst.setString(10, txtTelefonePai.getText());
pst.setString(11, txtEmailPai.getText());
pst.setString(12, txtNomeMae.getText());
pst.setString(13, txtTelefoneMae.getText());
pst.setString(14, txtEmailMae.getText());
pst.setInt(15, Integer.parseInt(txtCodigo.getText()));
pst.setString(16, txtEspecialidades.getText());
pst.setString(17, txtClasses.getText());
pst.executeUpdate();
JOptionPane.showMessageDialog(null, “Cadastro editado com sucesso!!!”);
listarDesbravadores();
}
catch(SQLException error) {
JOptionPane.showMessageDialog(null, error);
}
}

Utilizei no item 15 um iInteger.parseInt. Creio que o erro esteja nesta linha. Mas como poderei tornar-lo uma String se no meu banco de dados eu quero que ele seja uma variável do tipo “serial”? Esta é a minha dúvida, espero que possam me ajudar.

Olá,
no postgre serial é na verdade uma máscara para int.
Detalhe: pst.setInt(15, Integer.parseInt(txtCodigo.getText()));
A posição 15 seta o valor para especialidades.
O código é 17.

Outra coisa, vc ta usando String até pro campo dt_nasc, cada campo com seu tipo. Campos de data devem ser Date.

1 curtida

Obrigado, a ordem estava errada. E a variável dt_nasc coloquei como String porque no seu campo de texto eu já coloquei em um tamanho pré-definido por números, pois não estava dando muito certo com Date.

O pior é que não justifica, deve funcionar com Date. Se não funcionou, tem outro problema e é “só” resolver. Trocar pra String não é solução, é gambiarra, é empurrar com a barriga.

  1. Com String vc não tem validação de data. Eu poderia colocar 99/99/9999.
  2. Com String vc não consegue fazer uma busca no banco dizendo me traz os aniversariantes deste mês. Nesta situação sim vc vai ver oque é problema, usando String.

*Só uma dica.

1 curtida