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

5 respostas
anyblueangel3

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

5 Respostas

staroski

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

anyblueangel3

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

hugokotsubo

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…

davidbuzatto

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.

anyblueangel3

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

Atenciosamente,
Ronaldo

Criado 13 de maio de 2022
Ultima resposta 13 de mai. de 2022
Respostas 5
Participantes 4