Erro na edição de usuário

3 respostas Resolvido
jframecrudpostgresqljava
Lucas_Santos_Ribeiro

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.

3 Respostas

Rodrigo_Void
Solucao aceita

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.

Lucas_Santos_Ribeiro

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.

Rodrigo_Void

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.

Criado 26 de abril de 2017
Ultima resposta 27 de abr. de 2017
Respostas 3
Participantes 2