Comando delete não está funcionando.[Resolvido]

7 respostas
Dani_Gomes

Criei o método:

String sql = "DELETE FROM alunos WHERE id='"+bean.getCodigo()+"';";
        Statement stmt = connDB.connect(bean).createStatement();
        stmt.executeUpdate(sql);
//        stmt.execute("DELETE FROM cursos_has_alunos WHERE matricula = '"+bean.getCodigo()+"'");
        JOptionPane.showMessageDialog(null, "Aluno excluído com sucesso!!!", "Atenção!!!!", JOptionPane.INFORMATION_MESSAGE);

Porém, quando eu executo, ele passa por todas linhas, mas não faz o que deveria fazer com o sql.
Também não dá erro.
Alguém sabe por que isto acontece?

7 Respostas

kdoigor

1- o metodo bean.getCodigo() retorna valor ? e esse valor é valido no banco ?
2- vc não deveria deletar primeiro da tabela ‘cursos_has_alunos’ e depois da tabela ‘alunos’ ?
3- seu codigo ta num bloco try-catch ?

Dani_Gomes

1-Sim, o método:

bean.getCodigo()

Retorna um valor, e esse valor é válido no banco.
2-O valor que eu estou tentando deletar não tem nenhum registro inserido na tabela ‘cursos_has_alunos’. É que a linha que faz o segundo delete está comentada, mas não apareceu as duas barras, foi mal.
3-O bloco não está no try-catch, pois o tratamento de erro dele está na implementação do método, ‘throws sqlexception’. Me corrija se eu estiver errado, mas acredito que daí eu não necessito implementar o try-catch, certo?
Porém agora eu mudei um pouco meu código, que está assim:

public void excluiAluno(portariaBean bean) throws SQLException,Exception{
        PreparedStatement stmt = connDB.connect(bean).prepareStatement("DELETE FROM alunos WHERE id=?");
        stmt.setString(1,bean.getCodigo());
        stmt.execute();
//        stmt.execute("DELETE FROM cursos_has_alunos WHERE matricula = '"+bean.getCodigo()+"'");
        JOptionPane.showMessageDialog(null, "Aluno excluído com sucesso!!!", "Atenção!!!!", JOptionPane.INFORMATION_MESSAGE);
    }

E agora está dando o seguinte erro:

10/11/2011 12:28:01 swing.cadastro_Aluno btnExcluirActionPerformed
GRAVE: null
org.postgresql.util.PSQLException: ERRO: operador não existe: bigint = character varying
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:343)
	at Dao.portariaDao.excluiAluno(portariaDao.java:244)
	at Business.portariaBusiness.excluiAluno(portariaBusiness.java:168)
	at Action.portariaAction.excluiAluno(portariaAction.java:94)
	at swing.cadastro_Aluno.btnExcluirActionPerformed(cadastro_Aluno.java:324)
	at swing.cadastro_Aluno.access$300(cadastro_Aluno.java:43)
	at swing.cadastro_Aluno$4.actionPerformed(cadastro_Aluno.java:206)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÇÃO PARADA (tempo total: 47 segundos)

Se você puder me ajudar novamente, agradeço.
Enquanto isto eu vou tentando mudar alguma coisa, para ver se acerto o código.

kdoigor
stmt.setString(1,bean.getCodigo());

ta errado.

se o campo no banco é inteiro se tem q passar inteiro
stmt.setInteger(1,bean.getCodigo());
e no metodo getCodigo retorna inteiro
Dani_Gomes

Fiz o que você disse, ficou assim:

public void excluiAluno(portariaBean bean) throws SQLException,Exception{
        PreparedStatement stmt = connDB.connect(bean).prepareStatement("DELETE FROM alunos WHERE id=?");
        stmt.setInt(1, bean.getMatricula());
        stmt.execute();
//        stmt.execute("DELETE FROM cursos_has_alunos WHERE matricula = '"+bean.getCodigo()+"'");
        JOptionPane.showMessageDialog(null, "Aluno excluído com sucesso!!!", "Atenção!!!!", JOptionPane.INFORMATION_MESSAGE);
    }

e o meu bean:

public Integer getMatricula() {
        return Integer.parseInt(matricula);
    }

Agora não dá erro nenhum, porém continua sem excluir o cadastro.

kdoigor

coloca

Dani_Gomes

Não resolveu, diz que o índice da coluna está fora do intervalo:0, numero de colunas:1.

Dani_Gomes

Foi pura rateada minha, estava faltando dar um commit.
Por isto não estava deletando o cadastro.
Valeu pela ajuda.

Criado 9 de novembro de 2011
Ultima resposta 11 de nov. de 2011
Respostas 7
Participantes 2