Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2244309
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: Java

2011-07-27 14:49:14

1.Statement:提供addBatch(String sql) 和 excuteBatch()方法批量更新数据

  1. Connection conn=DriverManager.getConnection(url, "root", "admin");            
  2.  Statement stmt=conn.createStatement();
  3.  stmt.addBatch("insert into xautstu values('4','49','xiagong','4444')");
  4.  stmt.addBatch("insert into xautstu values('5','55','wuwu','5555')");
  5.  stmt.addBatch("insert into xautstu values('9','66','cui','6666')");
  6.  stmt.executeBatch();            //批量执行

 

 

使用预编译语句和批量更新

首先我们得大致的了解数据库是怎么处理各种数据库操作语句的。当数据库接收到一个语句时,数据库引擎首先解析该语句,然后分析是否有语法,语义错误。如果没有错误,数据库将计算出如何高效的执行该语句。一旦得出执行策略,就由数据库引擎执行该语句,最后把执行结果反馈给用户。虽然数据库厂商对各自的数据库做了最大的优化,但是可以想象这的确是一个开销很大的工作。

于是,我们考虑如何使我们的数据库操作变得更高效呢?如果一条语句执行一次后,数据库就记录下该语句的执行策略,那么以后执行相同语句时,就可以省去上面的种种麻烦了。

Java里提供了这样的接口――PreparedStatement.。通过预编译PreparedStatement 对象, 我们能够很容易的提高语句执行效率。同时,需要指出的是Java里还有另一个实现数据库操作的接口――Statement,但是当语句格式固定时我们更倾向于使用PreparedStatement,只有当语句格式无法预见时,我们才考虑采用Statement。

以下是执行1000次语句结构相同的Insert,Update和Select语句的测试结果:

接口类型

Insert语句

Update语句

Select语句

第一次测试耗时

第二次测试耗时

第一次测试耗时

第二次测试耗时

第一次测试耗时

第二次测试耗时

Statement

2360 ms

2190 ms

3790 ms

3460 ms

3570 ms

2530 ms

PreparedStatement

1270 ms

1040 ms

2600 ms

2410 ms

440 ms

380 ms

分析: PreparedStatement的效率明显比Statement要高出很多。另外,对于查询语句我们还得深入地看看JDBC是如何实现的。JDBC执行一次查询后,将返回一个ResultSet(结果集)。为了建立这个结果集,JDBC将对数据库访问两次。第一次要求数据库对结果集中的各列进行说明,第二次告诉数据库,当程序需要获取数据时应如何安置这些数据。由此我们能够算出执行一次或多次查询,JDBC需要访问数据库的次数。

访问数据库次数 = 结果集中的列数 * 语句执行的次数 * 2 

如果同样执行100次相同查询,结果集中的列数也相同时,假设为20列:

使用Statement:  访问数据库次数 = 20 * 100 * 2 = 4000   

使用Prepared Statement:  访问数据库次数 = 20 * 1* 2 = 400

 

 

未完待续。。。

 

 
 
 
 
阅读(7219) | 评论(0) | 转发(0) |
0

上一篇:郎咸平的博客

下一篇:一道趣味面试题

给主人留下些什么吧!~~