Comando DELETE não quer funcionar, o que está errado?

Estou dando o comando SQL para eliminar um determinado registro mas ele não está apagando a(s) linha(s) linha(s) nenhuma(s). O que pode estar errado. Veja os métodos:

    public boolean excluirCadForProdutoDAO(String pId_produto, String pId_fornecedor){
        System.out.println("Exclusão produto: " + pId_produto + " fornecedor: " + pId_fornecedor);
        try {
            this.conectar();
            this.executarUpdateDeleteSQL(
                "DELETE FROM fornec_produto "
                + "WHERE "
                + "id_produto = " + pId_produto
                + "AND id_fornecedor = '" + pId_fornecedor + "'"
                + ";"
            );
            return true;
        }catch(Exception e){
            e.printStackTrace();
            return false;
        }finally {
            this.fecharConexao();
        }
    }

Esse método chama o executarUpdateDeleteSQL(…) que está na classe ConexaoMySQL, veja o método:

    public boolean executarUpdateDeleteSQL(String pSQL){
        try {
            
            //createStatement de con para criar o Statement
            this.setStatement(getCon().createStatement());

            // Definido o Statement, executamos a query no banco de dados
            getStatement().executeUpdate(pSQL);
            
        } catch (SQLException ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

Por algum motivo ele não está funcionando, se quiser perguntar ou pedir código que está faltando pode falar. Gostaria que vocês prestassem atenção no primeiro método, principalmente na sintaxe do comando SQL.

Obrigado,
Ronaldo

Você colocou o id_fornecedor entre aspas, tem certeza de que ele é uma coluna do tipo VARCHAR no banco?

Staroski, tenho certeza o campo é varchar. Mas tanto faz. O fato é que não está apagando. Não sei o que fazer.

Não concatene os valores diretamente na query, pois isso deixa a aplicação vulnerável a ataques de SQL injection (leia aqui para mais detalhes ← apesar deste link não ser em Java, a ideia é basicamente a mesma).

Em vez disso, prefira usar a query com parâmetros e setá-los no PreparedStatement:

PreparedStatement ps = conn.prepareStatement("DELETE FROM fornec_produto WHERE id_produto=? AND id_fornecedor=?");
// assumindo que id do produto é um número e id do fornecedor é um VARCHAR (se não for, mude para o setXXX mais adequado)
ps.setInt(1, pId_produto);
ps.setString(2, pId_fornecedor);

ps.executeUpdate();

Quanto a não estar apagando, não temos como saber o motivo só com as informações dadas. Pode ser que a tabela não tenha um registro com os id’s que vc informou, pode ser que o usuário usado na conexão não tenha permissão de apagar da tabela, etc etc etc…

1 curtida

Na concatenação o id do produto tá “grudando” com o AND. Ou põe um espaço antes do AND dentro da String ou faz direito como já sugerido, tomando cuidado com essas “grudadas” que podem acontecer mesmo assim.

1 curtida

David, muito obrigado!!!
É a segunda vez que você corrige um erro de digitação meu. O programa deu certo.

Atenciosamente,
Ronaldo