我想在hibernate中删除base中的列,其中insert -regBroj-参数与base中的一个相同。
这是我在控制器中删除的方法。但我不断得到 SQLGrammarException: 引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where子句'中的未知列'BG026CH'
这个'BG026CH'是regBroj的值,我用它作为参数在数据库中查找车辆并删除它。我将它插入adminPage中的文本区域。
isValidLogin():Observable<boolean> {
答案 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
换句话说,这个注入的查询将丢弃整个表!准备好的语句会阻塞这个输入,黑客就不会执行查询。