Deletar utilizando PreparedStatement

5 respostas
javamysqlsql
R

Preciso realmente de ajuda, pois não faço a menor ideia do que há de errado no código de deletar os dados no SQL. Tenho a classe Dados onde possui:

public boolean deleta(String tabela,String nome,String idade)
{
        boolean retorno = false;
        try{
            PreparedStatement stmt = 
             (PreparedStatement) this.con.prepareStatement("delete from " + tabela + "where '"+nome+"',"+idade+");");
            stmt.execute();
            stmt.close();
            retorno = true;
        }
        catch(SQLException ex)
        {
            retorno = false;
            System.out.println("Erro INSERT:" +ex);
        }
        return retorno;       
}

O erro que aparece é que a sintaxe SQL está errada, mas não sei o que! Me ajudem, tenho prova disso :frowning:

5 Respostas

E

Esta mesmo, algumas palavras da pra ver que estão sem espaços e também está faltando um AND, deveria ser assim:

PreparedStatement (PreparedStatement) this.con.prepareStatement("delete from " + tabela + 
" where " + nome + " and " + idade );
N

Falta aspas simples ao redor do idade, não?
No PreparedStatment mesmo, finalzinho do comando.
Teste…

TalonNoxus
("delete from " + tabela + "where '"+nome+"',"+idade+");");

Eu acho que o que esta errado é que antes do WHERE não tem espaço
ai o nome da tabela e where ficam tudo juntos e também as aspas simples

pmlm

Imagina que não tens java e estás diretamente a eliminar de SQL. Como seria a tua query?
Não me parece que fosse como estás a fazer.

O que tu deves querer deve ser algo assim

PreparedStatement stmt = this.con.prepareStatement("delete from " + tabela + " where nome = ? and idade = ?");
 stmt.setString(1, nome);
 stmt.setInt(2, idade);
 stmt.execute();

Já agora porque é que tabela é parâmetro? tens várias tabelas com nome e idade e queres especificar de qual queres eliminar ?

V

Deverias utilizar interrogação ao invés de variaveis concatenadas com a string exemplo:

String sql =“delete from pessoas where nome=?”;

PreparedStatement stmt = this.con.prepareStatement(sql);//aqui passa o comando de deleção
stmt.setInt(1,nome);//aqui você define qual é o nome, 1 por conta de ser o primeiro(e unico) parametro da string sql, algo assim. Fica mais organizado

Criado 11 de setembro de 2016
Ultima resposta 13 de set. de 2016
Respostas 5
Participantes 6