PrepareStatement和Statement的联系和区别

联系:PrepareStatement继承自Statement,两者都是接口,内部都要建立Socket连接,效率都不是很高。
区别主要有以下几点

1、性能方面
PreparedStatement有预编译的过程,已经绑定sq|,之后无论执行多少遍,都不会再去进行编译。而statement不同,如果执行多少遍,则相应的就要编译多少遍sql,所以preStatement的效率比Statement要高一些

Statement statement = conn.createStatement();
PreparedStatement preStatement =
conn.prepareStatement(sql);

执行的时候:
ResultSet ret= statement.executeQuery(sq|);
ResultSet ret= preStatement.executeQuery();

2、代码的可读性和可维护性

虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码可读性和可维护性会比较好.

stmt.executeUpdate("insert into tb_ _name
(col1,col2,col2,col4) values
("+var1+"," +var2+"," +var3+' " +var4+")' );
//stmt是Statement对象实例

perstmt = con.prepareStatement("insert intotb_ name (col1 ,col2,col2,col4) 
//prestmt是PreparedStatement对象实例
values (???)");perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate(); 

3、安全性问题,
PreparedStatement可防止SQL注入。SQL注入情况如下所示:

//输入要删除的账户:'abc' or 1=1
String username="'abc' or 1=1"
 
//等待用户输入的SQL语句
String sql=select * from user where username =' "+username+“ ‘;

这种情况已经属于非法输入
使用Statement 的话最后的sql语句则是如下所示:

select * from user where name = 'abc' or 1=1;

因为’1’='1’肯定成立,所以可以任何通过验证,里面的数据可能就会被改掉
4、继承关系
因为是继承关系,PreparedStatement作为Statement的儿子,继承了Statement 的所有功能,它爸能做的它都能做,它能做的它爸不一定可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值