Como fazer um método de Exclusão

Pessoal, estou tentando excluir umas informções no banco que tem uma tabela chamada pessoa e tem os seguintes campos: cpf, nome, profissao, sexo, doador, superior, habilitacao.

fiz o método assim e não está dando certo:

public void excluir() {
    String sql = "DELETE FROM cadastro.pessoa where cpf = cpf " +
            "AND nome = nome " +
            "AND profissao = profissao " +
            "AND sexo = sexo " +
            "AND doado = doador " +
            "AND superior = superior " +
            "AND habilitacao = habilitacao";
    
    try {
        PreparedStatement stmt = getConnection().prepareStatement(sql);
        stmt.setLong(1, cpf);
        stmt.setString(2, nome);
        stmt.setString(3, profissao);
        stmt.setString(4, sexo);
        stmt.setString(5, doador);
        stmt.setString(6, superior);
        stmt.setString(7, habilitacao);
        
        stmt.execute();
        
        JOptionPane.showMessageDialog(null, "O Registro foi Excluido com Sucesso");
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, "Houve um erro ao tentar Excluir o Registro: \n" + e.getMessage());
        e.printStackTrace();
    }

Será que alguém pode me ajudar por favor???

Tenta assim velhinho:

DELETE <COLUNA> FROM <TABELA> where cpf = 'cpf' " + 
"AND nome = 'nome' " + 
"AND profissao = 'profissao' " + 
"AND sexo = 'sexo' " + 
"AND doado = 'doador' " + 
"AND superior = 'superior' " + 
"AND habilitacao = 'habilitacao'"; 

Coloque sempre aspas simples no valor nas querys.

Att,
Marck

 String sql = "DELETE FROM cadastro.pessoa where cpf = ? AND nome = ? AND profissao = ? AND sexo = ? AND doado = ?  AND superior = ? AND habilitacao = ?"; 

o resto fica igual. Apesar que neste caso, bastava usar o CPF como parametro já que ele é único para cada pessoa.

[]´s

Carlos

[quote=kissdemon]

o resto fica igual. Apesar que neste caso, bastava usar o CPF como parametro já que ele é único para cada pessoa.

[]´s

Carlos[/quote]

Boa!!!

E completando, no final, coloca a msg de confirmação de deleção dessa maneira:

int i = stmt.execute(); 

Ele retorna qtde de registros deletados.

if(i > 0){
JOptionPane.showMessageDialog(null,“Deletado”);
}

Valeu.

E se i==0 ? lança exceção ? :wink:
Esse código de confirmação é bom para insert e update
para verifica que realmente aconteceu a operação, mas
num delete é inutil. Repare que se não existir nenhum registro nas
condições do where, ele está deletado por default.
Ou seja, i==0 para delete não é uma exceção à regra, portanto
no caso do delete não precisa fazer aquela verificação.

acho q o mais simples ainda é

delete from database.table where nome_key = key;

claro se vc quizer deletar apenas uma linha

valeu

[quote=sergiotaborda][quote=Marck]

Ele retorna qtde de registros deletados.

if(i > 0){
JOptionPane.showMessageDialog(null,“Deletado”);
}
[/quote]

E se i==0 ? lança exceção ? :wink:
Esse código de confirmação é bom para insert e update
para verifica que realmente aconteceu a operação, mas
num delete é inutil. Repare que se não existir nenhum registro nas
condições do where, ele está deletado por default.
Ou seja, i==0 para delete não é uma exceção à regra, portanto
no caso do delete não precisa fazer aquela verificação.
[/quote]

???
Se i == 0, NAO gera exceception. Simplesmente não foi encontrado o que tem na clausula “where”.

Eu ainda acho que é SIM mto útil.

Marck.

[quote=Marck][quote=sergiotaborda][quote=Marck]

Ele retorna qtde de registros deletados.

if(i > 0){
JOptionPane.showMessageDialog(null,“Deletado”);
}
[/quote]

E se i==0 ? lança exceção ? :wink:
(…)
[/quote]

???
Se i == 0, NAO gera exceception. Simplesmente não foi encontrado o que tem na clausula “where”.

Eu ainda acho que é SIM mto útil.

[/quote]
Então , mas se não lança excação, não deveria a mensagem"deletado" se mostrada mesmo quando i==0 ? Se não, pq não ?

[quote=sergiotaborda]

Então , mas se não lança excação, não deveria a mensagem"deletado" se mostrada mesmo quando i==0 ? Se não, pq não ?[/quote]

Não. Na minha opinião não. Imagine que o usuário precise da informação que algo foi deletado. Se nada foi encontrado na base, e vc informa que algo foi deletado, vc está fornecendo informação errada, ao contrário do que vc afirmou nesse post:

É só minha opinião.
Marck,

um if … se i == zero informa que nada foi deletado pois os dados sao incompativeis… se for maior informa a quantidade … normalmente exclusoes são assim … certo ?

Acho que é util e correto sim… se for maior a quantidade =)

if (result == 0) { conexao.rollback(); return (false); } else { conexao.commit(); return(true); }

e uma perguntinha… porque usar o FROM no delete?!

Obs: Nesse caso, você pode no seu where colocar só o número do cpf… pois é um documento unico.

Tchauzin!

Usar codigo de retorno do JDBC so pra saber se teve sucesso ou nao?
hmmm… pra q?

public void excluir(Dossie  dossie, RegistroCriminal registroCriminal) throws Exception{

		try {
			StringBuffer sql = new StringBuffer();

			sql.append(" DELETE FROM XXXXXX");			
			sql.append(" WHERE XXXXX = ?");
			sql.append(" AND XXXXXXXXXXX = ?");
			
			PreparedStatement stmt = ConexaoOracle.getConn().prepareStatement(sql.toString());
			
			stmt.setLong(1, dossie.getId());
			stmt.setLong(2, registroCriminal.getId());
			stmt.execute();

			stmt.close();

			ConexaoOracle.getConn().commit();

		} catch (Exception e) {

			ConexaoOracle.getConn().rollback();

			e.printStackTrace(); // Erro pra mim, programador. 

			throw new Exception("Falha ao excluir Dossie do individuo"); // lança uma exceção mais amigavel pra cima

		}

	}

Galera vocês são de mais, valeu pela ajuda, testei das duas formas e funcionou legal.

MUITO OBRIGADO A TODOS VOCÊS PELA FORÇA…[color=red][/color][size=18][/size][b]

:smiley: :smiley: :smiley: