Erro ao tentar Excluir

10 respostas
B

Metodo que esta no Pacote DAO…

public void Excluir(String del[]) throws SQLException 
    {
        PreparedStatement stmt = this.connection.prepareStatement("delete * from cadastroinfo where CodCad = ?");
       stmt.setString(1, del[0]);
     
        stmt.executeUpdate();
        JOptionPane.showMessageDialog(null, "Dados Removidos com Sucesso");
        stmt.close();
    }

No codigo abaixo chamo o metodo…

private void Botao_ExcluirActionPerformed(java.awt.event.ActionEvent evt) {                                              
                   
                String del;

                del = TfCod.getText();
                del = TfData.getText();

                try 
                {
                    CadastroDao dao = new CadastroDao();
     erro aqui  dao.Excluir(del);
                    TfCod.setText(null);
                    TfData.setText(null);
                }
                catch (Exception o) 
                {
                    System.out.println(o);
                }
}

Ocorre que quando chamo o metodo excluir ele me da erro no parametro (del).
Verifiquem o que acham do codigo. Caso tenham alguma ideia melhor agradeço.

Obrigado…

10 Respostas

M

Acontece que na assinatura do método, você determina que um array de String será usado como parâmetro, porém você chama o método com apenas um String normal (e não um array…) por isso o erro.
Sugiro que mude a assinatura do método para:

public void Excluir(String del) throws SQLException {
.....
stmt.setString(1, del); 
.....
}

E no seu código ficaria algo assim:

....
del = TfCod.getText();
.....
dao.Excluir(del);
.....
gilmaslima
// mude isso 
catch (Exception o)   
{  
      System.out.println(o);  
}
// por isso 
catch (Exception o)   
{  
      o.printStackTrace();  
}

Cloque a saida do stackTrace

B

Mudei para o modo que o Marcos indicou esta me dando um erro de SQL.

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘* from cadastroinfo where CodCad = ‘2’’ at line 1

obrigado…

sowyer

e tem outra coisa ....

String del;  
   
                 del = TfCod.getText();  
                 del = TfData.getText();

com essas linhas ai.. vc não está "colocando" os dois valores na string del... e sim apenas o último valor ( TfData.getText(); ) ..

se quiser os dois, tem que fazer assim:

String del;  
   
                 del = TfCod.getText();  
                 del += TfData.getText();

:wink:

EDIT:
========================

O método completo seria assim:

public void Excluir(String del) throws SQLException   
     {  
         PreparedStatement stmt = this.connection.prepareStatement("delete * from cadastroinfo where CodCad = ?");  
        stmt.setString(1, del);  
        
         stmt.executeUpdate();  
         JOptionPane.showMessageDialog(null, "Dados Removidos com Sucesso");  
         stmt.close();  
     }
laudenpower

Me corrijam se eu estiver errado…, mas acredito que da forma em que o SQL está sendo executado sempre haverá um problema, uma vez que ele está sendo executado tendo como base o código do cadastro, logo não existe a necessidade de se passar a data como parâmetro, nesse caso bastaria passar o código do cadastro, lógico que além disso tem as correções que já foram mencionadas, mas o principal problema nesse caso seria o parâmetro incorreto que se estaria sendo mandado para o método.
Tente dessa forma para ver se funciona:

private void Botao_ExcluirActionPerformed(java.awt.event.ActionEvent evt) {                                                 
                     
                int codigoExclusao;   
  
                codigoExclusao = Integer.parseInteger(TfCod.getText());   //aqui você coloca o código a ser excluido na tabela 
  
                try   
                {   
                    CadastroDao dao = new CadastroDao();   
                    dao.Excluir(codigoExclusao);//aqui envia o código para o método                         
                }   
                catch (Exception o)   
                {   
                    System.out.println(o.getMessage());//pode fazer assim também   
                }   
}   

public void Excluir(int codigoExclusao) throws SQLException   
    {   
        PreparedStatement stmt = this.connection.prepareStatement("delete * from cadastroinfo where CodCad = ?");   
        stmt.setInt(1, codigoExclusao); //dessa forma ele exclui baseado apenas no código informado não necessitando de mais nada além disso  
       
        stmt.executeUpdate();   
        JOptionPane.showMessageDialog(null, "Dados Removidos com Sucesso");   
        stmt.close();   
    }

Espero ter ajudado… :slight_smile:

aconstantino

nossa…sério…nem vi o resto

a primeira coisa que eu vi foi

delete * from cadastroinfo where CodCad = ?

isso é um erro comum, rs

na verdade o código sql correto é

delete from cadastroinfo where CodCad = ?
laudenpower

dohko:
nossa…sério…nem vi o resto

a primeira coisa que eu vi foi

delete * from cadastroinfo where CodCad = ?

isso é um erro comum, rs

na verdade o código sql correto é

delete from cadastroinfo where CodCad = ?

No final nem eu vi esse erro sql também, fiquei preso a forma como o parâmetro foi passado, mas acredito que depois dessa correção o código funcionará sem problemas :slight_smile:

Lavieri
outra sugestão é trocar a assinatura do método assim
public void excluir(String ... del) throws SQLException { 
//...
}
deste forma seu código vai continuar igual! praticamente, e vc pode charmar o método de varias forma como
excluir("14"); //aqui vc tera um String[1] onde del[0] = "14"
excluir("22","7","3"); //nesse caso vc terá uma String[3] onde del[0] = "22", del[1] = "7" ....

String[] deletar = new String[4];
deletar[0] = "11";
deletar[1] = "33"; 
//...
excluir(deletar);
desta forma vc pode usar um FOR dentro do seu método para percorrer todos os deletes, e fica + facil de usar
laudenpower
Lavieri:
outra sugestão é trocar a assinatura do método assim
public void excluir(String ... del) throws SQLException { 
//...
}
deste forma seu código vai continuar igual! praticamente, e vc pode charmar o método de varias forma como
excluir("14"); //aqui vc tera um String[1] onde del[0] = "14"
excluir("22","7","3"); //nesse caso vc terá uma String[3] onde del[0] = "22", del[1] = "7" ....

String[] deletar = new String[4];
deletar[0] = "11";
deletar[1] = "33"; 
//...
excluir(deletar);
desta forma vc pode usar um FOR dentro do seu método para percorrer todos os deletes, e fica + facil de usar

Mas dessa forma ao se fazer vários deletes, haveria o problema de mais de um deles não poder ser executado, tipo por exemplo por conta de questões de integridade de chave, ou nesse caso o sql exception trataria de devolver todas as exceções também?, por que acho que ao se fazer vários deletes, ao encontrar a primeira exceção o método retornaria a mesma deixando outras possíveis exceções para trás.

Espero ter me expressado direito :)

Lavieri

laudenpower:

Mas dessa forma ao se fazer vários deletes, haveria o problema de mais de um deles não poder ser executado, tipo por exemplo por conta de questões de integridade de chave, ou nesse caso o sql exception trataria de devolver todas as exceções também?, por que acho que ao se fazer vários deletes, ao encontrar a primeira exceção o método retornaria a mesma deixando outras possíveis exceções para trás.

Espero ter me expressado direito :)

Bom, existe uma coisa chamada transação em Banco de dados, onde vc pode executar 102993013 ações, e só confirmar c tudo der certo…

Normalmente se alquem quer deletar varias coisas, ela que tudo de certo, e pode querer também que só dele, se conseguir deletar tudo, caso contrario ela reverta tudo que aconteceu, para isso existe as tranzações, o commit e o rollback…

mais quem implementou pode fazer de varias formas, pode fazer sem tranzação, pode sair deletando, caso der erro, segurar a exceção, e continuar deletando o resto, e no fim, lançar uma exceção, com todas as execções que ocorreram juntas…

Pode ainda, começar a deletar, e se der erro, parar tudo, porem manter o que foi deletado, e jogar o erro pra fora, para que a pessoa veja que parou no meio, e que não deletou tudo, só foi ate aquele ponto, fica tudo a cargo de cada um…

eu particularmente não uso Daos, não uso mais SQL (tento não usar) … e mecho mais com o hibernate, que torna tudo + simples

Criado 13 de janeiro de 2009
Ultima resposta 14 de jan. de 2009
Respostas 10
Participantes 7