我们都知道PreparedStatement可以防止sql注入,Statement会有sql注入的危险,却从来没关心过底层原理!数据库产商提供的数据库jar包中有PreparedStatement类。
说说我的理解,请大家指正!
这么一条sql语句: SELECT * FROM employees WHERE salary = ?
salary字段是数字类型的。
如果java中使用PreparedStatement来处理这条sql语句,我现在传入的值是8000 or 1 = 1
那么最终的sql语句为SELECT * FROM employees WHERE salary = '8000 or 1 = 1' (即PreparedStatement底层会在传入的值两边加上'单引号,而salary字段又是数字类型,所以最终这条sql语句估计会报错)
注意:如果填入的值中有'单引号,似乎也没关系,数据库产商的PreparedStatement底层的实现类照样在值的两边加上'单引号,并且会把值中的'单引号转义。
不知道大家怎么看呢?