如何避免java中的单报价问题来创建准备好的报价查询

如何避免java中的单报价问题来创建准备好的报价查询,java,hibernate,prepared-statement,Java,Hibernate,Prepared Statement,示例:更新员工集合名称='EMP123',其中ID=100 这里的名称字段由用户交替给出,用户可以用单引号给出名称。显示的错误如下所示 ORA-00933:SQL命令未正确结束 PreparedStatement stm = connection.prepareStatement("Update EMPLOYEES set NAME = ? where ID = 100"); stm.setString(1,"EMP123"); System.out.println(stm.execut

示例:更新员工集合名称='EMP123',其中ID=100

这里的名称字段由用户交替给出,用户可以用单引号给出名称。显示的错误如下所示 ORA-00933:SQL命令未正确结束

PreparedStatement stm = connection.prepareStatement("Update EMPLOYEES set NAME = ? where ID = 100");    
stm.setString(1,"EMP123");
System.out.println(stm.executeUpdate()+" Rows has changed");

这是保护代码免受sql注入攻击的方法

不要通过连接字符串来构建sql。使用带有替换占位符的
PreparedStatement
。@Jim Garrison实际上在这个准备好的语句中是由用户动态给出的,可能是用户给出了单引号,也可能不是。允许用户给出sql是一个非常糟糕的主意。如果您必须这样做,那么就由用户提供正确的SQL语法,您不能期望修复他们所犯的错误。