Oi, Boa Noite!!
eu tenho um método para remover itens duma JList e do banco simultaneamente…mas não funciona… :shock:
alguém tem alguma sugestão?
publicvoidremover(Campic){Stringsql="DELETE FROM CAMPUS WHERE codigo = "+c.getCodigo();bd.conecta();try{comando=bd.getConexao().createStatement();comando.execute(sql);comando.close();}catch(SQLExceptione){e.printStackTrace();}bd.desconecta();}
privatevoidbtRemoveCampusActionPerformed(java.awt.event.ActionEventevt){if(cmbCampus.getSelectedIndex()!=-1){Campic=(Campi)cmbCampus.getSelectedItem();intresp=JOptionPane.showConfirmDialog(this,"Você deseja exlcuir o campus "+c.getNome()+" e todos os setores relacionados a ele?","Remoção de Campus",JOptionPane.YES_NO_OPTION);if(resp==JOptionPane.YES_OPTION){cDAO.remover(c);carregarCampus();carregarRamais(c.getCodigo());JOptionPane.showMessageDialog(rootPane,"Campus removido com sucesso!");}}}
Não sei se isso do código é suficiente para me fazer clara…a primeira parte é da minha classe CampiDAO e a segunda é da minha classe CampiJFrame!!
Obrigada!
privatevoidbtRemoveCampusActionPerformed(java.awt.event.ActionEventevt){if(cmbCampus.getSelectedIndex()!=-1){CampianCampi=(Campi)cmbCampus.getSelectedItem();intanResposta=JOptionPane.showConfirmDialog(this,String.format("Você deseja excluir o campus %s e todos os setores relacionados a ele?",anCampi.getNome()),RemoçãodeCampus", JOptionPane.YES_NO_OPTION); if (anResposta == JOptionPane.YES_OPTION) { CampiDAO.remover(anCampi); cmbCampus.clear(); cmbCampus.setModel(new DefaultComboBoxModel(CampiDAO.listar(null).toArray())); JOptionPane.showMessageDialog(this, "Campusremovidocomsucesso!"); }}
Tenta algo assim e nos dê o reply!
Abraços!
A
ArianeRebellato
Com alguns ajustes encaixei no meu código…dá o mesmo erro que antes com o meu método…
[color=red]20/10/2010 14:36:22 trabalhoarianemarcia.CampiJFrame btRemoveCampusActionPerformed
SEVERE: null
org.postgresql.util.PSQLException: ERROR: update or delete on table “campus” violates foreign key constraint “ramais_campi_fkey” on table "ramais"
Detalhe: Key (codigo)=(6) is still referenced from table “ramais”.[/color]
eu não vou conseguir deletar pq ‘campi’ é minha chave estrangeira em ‘ramais’? Tu sabe como eu poderia resolver isso?
A
ArianeRebellato
a minha intenção inicial foi esta…mas já não deu certo…
intresp=JOptionPane.showConfirmDialog(this,"Você deseja exlcuir o campus "+c.getNome()+" e todos os setores relacionados a ele?","Remoção de Campus",JOptionPane.YES_NO_OPTION);if(resp==JOptionPane.YES_OPTION){cDAO.remover(c);carregarCampus();
N
Nicolas_Fernandes
ArianeRebellato:
Com alguns ajustes encaixei no meu código…dá o mesmo erro que antes com o meu método…
[color=red]20/10/2010 14:36:22 trabalhoarianemarcia.CampiJFrame btRemoveCampusActionPerformed
SEVERE: null
org.postgresql.util.PSQLException: ERROR: update or delete on table “campus” violates foreign key constraint “ramais_campi_fkey” on table "ramais"
Detalhe: Key (codigo)=(6) is still referenced from table “ramais”.[/color]
eu não vou conseguir deletar pq ‘campi’ é minha chave estrangeira em ‘ramais’? Tu sabe como eu poderia resolver isso?
Bom, vamos lá…
Deveria ter mostrado esse erro desde o começo XD
O que acontece?
Em sua tabela Ramais, você possui uma referência para a tabela Campus, a qual, provavelmente, é NOT NULL. Ou seja, quando você tenta excluir algum campo da tabela Campus, o BD vai “chiar”, pois a tabela Ramais referencia alguma tupla desta. Então, para deletar da tabela Campus, você deve deletar os “filhos” que possuem o registro na tabela Ramais, primeiro. Algo do tipo:
// Classe de serviços para a tabela Campus.publicclassCampusServicos{publicvoidremoverRegistro(intanCodigo)throwsSQLException{// Busca o objeto Campus que tem o código que você passa por parâmetro...CampusanCampus=CampusDAO.buscarRegistro(anCodigo);// Busca todos os Ramais que tem esse objeto como referência...for(RamalanRamal:RamalServicos.buscarRamaisDoCampus(anCodigo)){RamalServicos.removerRegistro(anRamal.getCodigo());}// E agora sim você pode deletar o registro da tabela Campus, já que não possui nenhuma referência perdida por aí!CampusDAO.removerRegistro(anCodigo);}}
Sacou mais ou menos?
Abraços!
A
ArianeRebellato
Se eu excluo todos os setores antes e eeentããão peço pra excluir o campus dá td certinho…mas enquanto ele está sendo referenciado na outra tabela não pode ser removido…eu até já sabia que o banco se comporta assim…mas não tem uma maneira de corromper isso?
A
ArianeRebellato
:oops: saqueii…ehehe…pzé…não tinha me ligado ontem quando postei…descuulpa!! Origada pela atenção!!
N
Nicolas_Fernandes
Bom, você pode ‘corromper’ isso através do uso de constraints do Banco. Ao criar sua tabela Campus…
CreateTableIfNotExistsCampus(
...)OnDeleteCascade
Assim, vai deletando os filhos até chegar no pai.
Sacou?
privatevoidbtRemoveCampusActionPerformed(java.awt.event.ActionEventevt){if(cmbCampus.getSelectedIndex()!=-1){Campic=(Campi)cmbCampus.getSelectedItem();intresp=JOptionPane.showConfirmDialog(this,"Você deseja exlcuir o campus "+c.getNome()+" e todos os setores relacionados a ele?","Remoção de Campus",JOptionPane.YES_NO_OPTION);if(resp==JOptionPane.YES_OPTION){try{removerRegistro(c.getCodigo());cDAO.remover(c);carregarCampus();JOptionPane.showMessageDialog(rootPane,"Campus removido com sucesso!");}catch(SQLExceptionex){Logger.getLogger(CampiJFrame.class.getName()).log(Level.SEVERE,null,ex);}}}}