Java开发基础-JDBC-核心对象的使用—02

PreparedStatement和Statement的区别:

关联:

PreparedStatement继承自Statement:[通过源码可知]



区别:
 

PreparedStatement

Statement

代码可读性和可维护性 将sql语句与参数分离,可读性高 sql语句与参数混合拼接,可读性差,拼接sql语句易出错
执行性能

语句在被DB的编译器编译后的执行代码被缓存下来

,那么下次调用时只要是相同的预编译语句就不需要编译,

只要将参数直接传入编译过的语句执行代码中(相当于一个函数效果)就会得到执行,

相同操作sql可以复用,效率高,另外支持批处理操作

Statement的语句中,即使是相同一操作,因为数据内容不一样,每执行一次都要对传入的语句编译一次.效率低
安全性

不存在恶义SQL【sql参数注入】安全问题

select * from emp where ename= '随意' and sal = ' ';添加' or '1' = '1后

select * from emp where ename= '随意' and 

sal = ' ' or '1' = '1';

执行类似如上sql不会出现绕过验证访问数据库中数据,
使用预编译语句.传入的任何参数内容就不会和原来的语句发生任何匹配的关系.
只要全使用预编译语句,你就用不着对传入的数据做任何过虑.

存在恶义SQL【sql参数注入】安全问题

select * from emp where ename= '随意' and sal = ' ';

添加 ' or '1' = '1后

select * from emp where ename= '随意' and 

sal = ' ' or '1' = '1';

[红色部分恒成立]
执行类似如上sql会出现绕过验证访问数据库中数据,
使用普通的Statement,有可能要对恶意sql,做费尽心机的判断和过虑.
在JDBC应用中,具有一定开发经验的开发者,就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。


猜你喜欢

转载自blog.csdn.net/coder_boy_/article/details/80635364