一、提高代码可读性,和可维护性

为什么?直接上代码

statement.executeQuery("select id,name,age,sex from user where id>"+"id"+and name
like %"+subname+"%and sex="+sex+");

上面是使用statement对象的代码

pstatement=connection.preparedStatement("select id,name,sex from user where id>?and
name like ? and sex=?");
pstatement.setString(1,id);
pstatement.setString(2,name);
pstatement.setString(3,sex);
pstatement.executeQuery();

上面是使用PreparedStatementd对象的代码

虽然使用PreparedStatementd对象的代码多了几行,但是显得更为简洁。调理更为清晰,便于修改。

二、有助于提高性能

PreparedStatementd对象在创建时就指定了动态的SQL,因此这些SQL被编译之后缓存起来了。等下一次再执行相同的预编译语言时,就无需再对其进行编译,只要将参数传入就可以执行。动态SQL使用了「?」作为占位符,因此预编译语句的匹配率要比Statement对象使用的SQL语句大得多。

三、提高复用性

因为可以在占位符处,每次通过传入不同的参数对一个PreparedStatementd对象进行调用。

如果是使用statement对象,那么每次要执行不同条件的SQL语句时,需要重新创建statement对象。

四、提高安全性

如果使用Statement对象,就很容易收到SQL注入攻击。

String name="刘耀";
String sql="select * from user where name="+name+"";
statement.executeQuery(sql);

假设我将

String name=";drop table user;";

那么实际上

执行的sql语句成了:select * from user where name=;dorp table user;

资料库中user表就会被删除。但是使用PreparedStatement对象就不会有这样的危险。


推荐阅读:
相关文章