无法删除表单数据库SQLGrammarException

时间:2016-07-18 05:52:03

标签: mysql hibernate crud

我想在hibernate中删除base中的列,其中insert -regBroj-参数与base中的一个相同。

这是我在控制器中删除的方法。但我不断得到 SQLGrammarException: 引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where子句'中的未知列'BG026CH'

这个'BG026CH'是regBroj的值,我用它作为参数在数据库中查找车辆并删除它。我将它插入adminPage中的文本区域。

isValidLogin():Observable<boolean> {

2 个答案:

答案 0 :(得分:2)

请用以下字符串替换下面的字符串

String izbrisiquery = "DELETE FROM Korisnik WHERE brojLk='" + regBroj + "'";

答案 1 :(得分:2)

您应该考虑使用预准备语句,因为它们会自动使用引号来处理转义字段值,并且它们还可以保护您免受SQL注入。

// obtain a Connection object using your Hibernate session, or through some other means
Connection conn = getDBConnection();

for (int i = 0; i < lista.size(); i++) {
    if (regBroj .equals(lista.get(i).getRegBroj())) {
        String izbrisiquery = "DELETE FROM Korisnik WHERE brojLk = ?";
        PreparedStatement ps = conn.prepareStatement(izbrisiquery);
        ps.setString(1, regBroj);
        ps.executeUpdate();
        t.commit();

        return "adminPage";
    }
}

要了解SQL注入的工作原理,或恶意用户如何破坏Korisnik表,请假设有人攻击用户界面,为'' OR TRUE传递brojLK的值。这就是生成的DELETE语句的样子:

DELETE FROM Korisnik WHERE brojLk = '' OR TRUE

换句话说,这个注入的查询将丢弃整个表!准备好的语句会阻塞这个输入,黑客就不会执行查询。