PreparedStatement 为预编译方式。
代码差别:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
使用差别:
PreparedStatement 先后台建立一个过程,然后再将相关参赋矛进去,最后执行。Statement直接是一个SQL将后台执行。
Statement 由于直接拼装的SQL,对参数中的特殊字符较敏感(比如单引号'),使用这种方式必须对特殊字符进行处理,否则会出错。PreparedStatement则没有这个问题,它将参数作为一个对象赋矛后台,参数中的任何字符都作为参数的内容。
PreparedStatement 要求预编译的SQL必须是一个完整正确的SQL,而Statement动态拼装SQL只要求最好的SQL合法即可。如“select * from t_sys_user”,参数为:“where usercode='admin'” ,这种情况必须使用Statement。
综合上述:对于SQL固定,建议使用PreparedStatement;对SQL不固定的动态SQL,建议使用Statement,并处理特殊字符。