一.代码的可读性和可维护性
主要体现在sql语句的拼接上。特别是当一个sql语句存在一个表的多个属性值或者嵌套查询时,使用字符串的拼接将会让人非常厌恶,可阅读性与可维护性急剧下降
如下代码:String selectdistid = "select depb_ID from districtEPB where DistrictID= (select DistrictID from district where DistrictName=\"" + user.getSelect3() + "\" and CityID=(select CityID from city where CityName=\"" + user.getSelect2() + "\"and provinceID=(select provinceID from province where provinceName=\"" + user.getSelect1() + "\")));";
二.性能问题
三.安全性
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?
select * from tb_name = '随意' and passwd = '' or '1' = '1';
因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者: 把[';drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop table tb_name;
有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行. 而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement,有可能要对drop,;等做费尽心机的判断和过虑.
四、总结
2,进行批量处理的时候,建议使用PreparedStatement
参考:
1,Top Ten Oracle JDBC Tips http://www.onjava.com/pub/a/onjava/2001/12/19/oraclejdbc.html?page=1
2,Java Programming with Oracle JDBC http://oreilly.com/catalog/jorajdbc/chapter/ch19.html
3,SQL注入 http://www.cnblogs.com/sunnyfriday/archive/2012/10/29/javasql.html