publicclassJDBCUpdate{publicvoidalterar(Clientecli,Enderecoend){Connectionupdate=PostgreSQL.getConnection();try{Stringsql=("Update cliente, endereco set id_cliente=?, nome=?, cpf=?, id_endereco=?, rua=?, numero=?, complemento=?");PreparedStatementstmt=update.prepareStatement(sql);Clientecliente=newCliente();Enderecoendereco=newEndereco();stmt.setInt(1,cliente.getId());stmt.setString(2,cliente.getNome());stmt.setLong(3,cliente.getCpf());stmt.setInt(4,endereco.getId());stmt.setString(5,endereco.getRua());stmt.setInt(6,endereco.getNumero());stmt.setString(7,endereco.getComplemento());stmt.executeUpdate();}catch(Exceptione){JOptionPane.showMessageDialog(null,"erro ao fazer o Update "+e.getMessage());}finally{try{update.close();}catch(SQLExceptionex){Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE,null,ex);}}}}
Está tentando alterar duas tabelas ao mesmo tempo e isso nao pode.
Altere um de cada vez …
Para alterar cliente:
publicclassJDBCUpdate{publicvoidalterar(Clientecli){Connectionupdate=PostgreSQL.getConnection();try{Stringsql=("Update cliente set id_cliente=?, nome=?, cpf=?, id_endereco=?");PreparedStatementstmt=update.prepareStatement(sql);Clientecliente=newCliente();Enderecoendereco=newEndereco();stmt.setInt(1,cliente.getId());stmt.setString(2,cliente.getNome());stmt.setLong(3,cliente.getCpf());stmt.setInt(4,cliente.getIdEndereco());stmt.executeUpdate();}catch(Exceptione){JOptionPane.showMessageDialog(null,"erro ao fazer o Update "+e.getMessage());}finally{try{update.close();}catch(SQLExceptionex){Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE,null,ex);}}}}
Fora que o seu metodo estaria fazendo duas coisas … tente não fazer isso, programe limpo ! uma responsabilidade por metodo.
Maureli
Obrigado pela ajuda, fiz as alterações mas estou recebendo o seguinte erro:
ERRO: duplicar valor da chave viola a restrição de unicidade "cliente_pkey"
publicclassJDBCUpdate{publicvoidalterar(Clientecli){Connectionupdate=PostgreSQL.getConnection();try{Stringsql=("Update cliente set id_cliente=?, nome=?, cpf=?");PreparedStatementstmt=update.prepareStatement(sql);Clientecliente=newCliente();//Endereco endereco = new Endereco();stmt.setInt(1,cliente.getId());stmt.setString(2,cliente.getNome());stmt.setLong(3,cliente.getCpf());// stmt.setInt(4, endereco.getId());// stmt.setString(5, endereco.getRua());// stmt.setInt(6, endereco.getNumero());// stmt.setString(7, endereco.getComplemento());stmt.executeUpdate();}catch(Exceptione){JOptionPane.showMessageDialog(null,"erro ao fazer o Update "+e.getMessage());e.printStackTrace();}finally{try{update.close();}catch(SQLExceptionex){Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE,null,ex);}}}}
O
ozjunior
Boa Tarde,
Amigo, Sou Novato porém
Aparentemente você está tentando atualizar o valor de uma Primary Key, tenta dar um update apenas nos dados de nome e CPF…
Abs…
Maureli
Mas se eu não passar a Primary key, como o Update vai pegar a linha certa para atualizar?
O
ozjunior
“Update cliente set nome=?, cpf=? where id_cliente=?”
Maureli
Fiz as modificações
publicclassJDBCUpdate{publicvoidalterar(Clientecli){Connectionupdate=PostgreSQL.getConnection();try{Stringsql=("Update cliente set nome=?, cpf=? where id_cliente = ?");PreparedStatementstmt=update.prepareStatement(sql);Clientecliente=newCliente();//Endereco endereco = new Endereco();stmt.setString(1,cliente.getNome());stmt.setLong(2,cliente.getCpf());stmt.setInt(3,cliente.getId());// stmt.setInt(4, endereco.getId());// stmt.setString(5, endereco.getRua());// stmt.setInt(6, endereco.getNumero());// stmt.setString(7, endereco.getComplemento());stmt.executeUpdate();}catch(Exceptione){JOptionPane.showMessageDialog(null,"erro ao fazer o Update "+e.getMessage());e.printStackTrace();}finally{try{update.close();}catch(SQLExceptionex){Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE,null,ex);}}}}
Aqui eu passo os parâmetros para ser feito o Update
publicvoidalterar(Clientecli){Connectionupdate=PostgreSQL.getConnection();try{Stringsql=("Update cliente set nome=?, cpf=? where id_cliente = ?");PreparedStatementstmt=update.prepareStatement(sql);//Cliente cliente = new Cliente();//Endereco endereco = new Endereco();stmt.setInt(3,cli.getId());// Aqui estava o erro, eu estava usando cliente.getId(), mas cliente referenciava um Objeto null.stmt.setString(1,cli.getNome());stmt.setLong(2,cli.getCpf());// stmt.setInt(4, endereco.getId());// stmt.setString(5, endereco.getRua());// stmt.setInt(6, endereco.getNumero());// stmt.setString(7, endereco.getComplemento());stmt.executeUpdate();update.commit();