sql注入是指把sql关键字以变量的形式拼接到要执行的sql中,导致sql的执行效果发生变化。
非法字符:’ or 1=1 --
解决:sql预编译,参数化查询,对参数中的特殊字符进行替换,双引号替换单引号
PreparedStatement、Statement比较
1.PreparedStatement比Statement 更快
sql在执行之前会在数据库进行预编译,以后再有类似的查询可以重用,不用再次编译。
2.PreparedStatement参数化查询
使用?作为占位符,可以用不同的参数进行查询。
3.PreparedStatement可以防止SQL注入式攻击
使用PreparedStatement的参数化的查询可以阻止大部分的SQL注入。在使用参数化查询的情况下,数据库系统不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。