preparedStatement相比statement的优势

1、代码可读性和可维护性

statement是将参数拼接到sql语句,preparedstatement则是以“?”代替参数位再以传参的形式设置参数。其实无所谓好坏看个人习惯2、

 

2、性能

许多数据库会对预编译的语句进行缓存,以备重复调用。下次调用同一语句只要将参数传入编译过的语句执行就行不用再次编译(类似函数)。而statement即使是同一操作,但是每次操作数据不同,使整个语句匹配机会很小。事实上没有数据库会对普通语句编译后的执行代码缓存

 

在jdbc中减少网络通讯是最终目的,如果一个语句只执行一次使用statement效率高,因为只会产生一次网络到数据库的通讯,而prepareds要产生两次网络请求,第一次请求到数据库解析和优化语句消耗很大,第二次执行语句,它的性能体现在后面的重复执行

 

当然不是所有预编译语句一定被缓存,数据库本身有自己的策略

 

3、安全性

preparedstatement可以防止sql注入攻击

 

 

preparedstatement的batch功能

对比以下代码

//多次执行
PreparedStatement ps = conn.prepareStatement(     
   "INSERT into employees values (?, ?, ?)");     
for (n = 0; n < 100; n++) {     
  ps.setString(name[n]);     
  ps.setLong(id[n]);     
  ps.setInt(salary[n]);     
  ps.executeUpdate();     
}     

//使用batch
PreparedStatement ps = conn.prepareStatement(     
   "INSERT into employees values (?, ?, ?)");     
for (n = 0; n < 100; n++) {     
  ps.setString(name[n]);     
  ps.setLong(id[n]);     
  ps.setInt(salary[n]);     
  ps.addBatch();     
}     
ps.executeBatch();   

 上面一种方法需要发生101次网络请求,使用batch只要2次

 

oracle10g 的jdbc driver限制最大batch size是16383条

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值