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参数注入】安全问题 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。