在jdbc组件中,尽量使用PreparedStatement而避免使用Statement,原因如下:
1、PreparedStatement可读性更高,维护性更强(Statement需要动态拼接);
2、PreparedStatement在被编译后会被缓存下来,下次调用相同的预编译语句时不需要重新编译,只需传入对应参数就行;而对于Statement来说,及时insert into tb_name values(1,"11")、insert into tb_name values(1,"12"),由于插入的数据不同,需要重新编译语句;
3、Statement有可能会有sql注入风险:
如
-
ps.executeUpdate(select * from tb_name where username='"+name+"' and passwd='"+passwd+"');
如果将"or'1'='1'作为参数传入passwd,则任何用户名都可验证成功,或者直接传入drop table tb_name,那整张表都有被删除的可能。而 PreparedStatement是预编译的,后续传入的数据不会跟语句进行匹配关系。