JDBC(10)—批处理
- 批量处理JDBC语句,提高处理速度。
- 当需要成批的的插入或更新记录时可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率。
- 批量处理的方法:
- ——addBatch(String):添加需要批量处理的SQL语句或是参数。
- ——executeBatch():执行批量处理语句。
*通常我们会遇到两种批量执行SQL语句的情况: - ——多条SQL语句批量处理
- ——一条SQL语句的批量传参
- 以下三个方法使用了三种批量处理方式以及使用时间分别为:
*Statement使用时间:18271毫秒
*PreparedStatement使用时间:13808毫秒
*JDBC批处理:2046毫秒 - 实例
public class Volume_11 {
/**
* 1.向Sql Server中表customers插入100000条记录。
* 使用statement,花费时间:18271毫秒
*/
@Test
public void testBatchWithStatement(){
Connection conn = null;
Statement statement = null;
String sql = null;
try {
conn = TestTools.getConnection();
//事务开始
TestTools.beginTx(conn);
statement = conn.createStatement();
//开始计时
long begin = System.currentTimeMillis();
for(int i = 0; i < 100000; i++){
sql = "INSERT INTO customers VALUES('"+
(i+1)+"','name_"+i+"','29-6月-13')";
statement.executeUpdate(sql);
}
//计时结束
long end = System.currentTimeMillis();
System.out.println("时间:"+(end - begin));
//事务提交
TestTools.commit(conn);
} catch (Exception e) {
e.printStackTrace();
//事务回滚
TestTools.rollback(conn);
}finally{
TestTools.release(statement, conn);
}
}
/**
* 2.向Sql Server中表customers插入100000条记录。
* 使用Preparedstatement,花费时间:13808毫秒
*/
@Test
public void testBatchWithPreparedstatament(){
Connection conn = null;
PreparedStatement preparedstatement = null;
String sql = null;
try {
conn = TestTools.getConnection();
//事务开始
TestTools.beginTx(conn);
sql = "INSERT INTO customers VALUES(?,?,?)";
preparedstatement = conn.prepareStatement(sql);
Date date = new Date(new java.util.Date().getTime());
//开始计时
long begin = System.currentTimeMillis();
for(int i = 0; i < 100000; i++){
preparedstatement.setInt(1, (i+1));
preparedstatement.setString(2, "name_"+i);
preparedstatement.setDate(3, date);
preparedstatement.executeUpdate();
}
//计时结束
long end = System.currentTimeMillis();
System.out.println("时间:"+(end - begin));
//事务提交
TestTools.commit(conn);
} catch (Exception e) {
e.printStackTrace();
//事务回滚
TestTools.rollback(conn);
}finally{
TestTools.release(preparedstatement, conn);
}
}
/**
* 3.向Sql Server中表customers插入100000条记录。
* 使用JDBC批处理,花费时间:2046毫秒
*/
@Test
public void testBatch(){
Connection conn = null;
PreparedStatement preparedstatement = null;
String sql = null;
try {
conn = TestTools.getConnection();
//事务开始
TestTools.beginTx(conn);
sql = "INSERT INTO customers VALUES(?,?,?)";
preparedstatement = conn.prepareStatement(sql);
Date date = new Date(new java.util.Date().getTime());
//开始计时
long begin = System.currentTimeMillis();
for(int i = 0; i < 100000; i++){
preparedstatement.setInt(1, (i+1));
preparedstatement.setString(2, "name_"+i);
preparedstatement.setDate(3, date);
//"积攒"300条记录之后一块提交到数据库
preparedstatement.addBatch();
if((i + 1) % 300 == 0){
preparedstatement.executeBatch();//执行提交
preparedstatement.clearBatch();//清除积攒的记录
}
}
//若总条数不是积攒数的整数倍,则需要额外的在执行一次,比如总条数400,积攒数300,则执行一次之后还有100
//条记录,100%300不等于0无法提交,所以需要再判断一下是否需要再提交一次。
if(100000 % 300 != 0){
preparedstatement.executeBatch();//执行提交
preparedstatement.clearBatch();//清除积攒的记录
}
//计时结束
long end = System.currentTimeMillis();
System.out.println("时间:"+(end - begin));
//事务提交
TestTools.commit(conn);
} catch (Exception e) {
e.printStackTrace();
//事务回滚
TestTools.rollback(conn);
}finally{
TestTools.release(preparedstatement, conn);
}
}
}
JDBC(10)—批处理的更多相关文章
- JDBC进行批处理
转自 http://mousepc.iteye.com/blog/1131462 业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升 ...
- 使用JDBC进行批处理
在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...
- javaweb学习总结(三十六)——使用JDBC进行批处理
在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...
- JavaWeb学习笔记(十五)—— 使用JDBC进行批处理
一.什么是批处理 批处理就是一批一批的处理,而不是一个一个的处理! 当你有10条SQL语句要执行时,一次向服务器发送一条SQL语句,这么做效率上很差!处理的方案是使用批处理,即一次向服务器发送多条SQ ...
- JDBC进行批处理Batch
在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...
- 四.使用JDBC进行批处理操作
1 create table testbatch 2 ( 3 id int primary key, 4 name varchar(20) 5 ); 在实际的项目开发中,有时候需要向数据库发送一批SQ ...
- JDBC的批处理操作三种方式 pstmt.addBatch()
package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...
- JavaWeb学习总结(十一)--JDBC之批处理
一.批处理的介绍 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.批处理只针对更新(增.删.改)语句,批 ...
- JDBC的批处理操作三种方式
SQL批处理是JDBC性能优化的重要武器,批处理的用法有三种. package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import ...
- JDBC之批处理
JDBC之批处理 现在有这么一个需求,要求把2000条记录插入表中,如果使用java代码来操作,我们可以使用Statement或者PreparedStatement来实现,通过循环来把SQL语句一条又 ...
随机推荐
- RPC远程过程调用实例
什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程 ...
- python排序算法之冒泡,选择,插入
1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 ...
- 设置sde表空间为自动增长
有的用户在测试数据时,希望在SDE表空间里面不受限制地导入数据,于是需要将SDE的表空间设置为自动增长. 过程描述 1.可以在创建sde表空间的时候,添加参数Autoextend on,修改后创建命令 ...
- mysql配置为半同步复制
mysql 半同步插件是由谷歌提供,具体位置/usr/local/mysql/lib/plugin/下,一个是 master用的 semisync_master.so,一个是 slave 用的 sem ...
- Vijos1755 靶形数独 Sudoku NOIP2009 提高组 T4 舞蹈链 DLX
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目(传送门) 题意概括 给出一个残缺的数独,求这个数独中所有的解法中的最大价值. 一个数独解法的价值之和为每个位置所填的数值 ...
- P1220 关路灯 区间dp
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- react 环境搭建
1:需要给系统装一个node https://nodejs.org/zh-cn/ 2:然后需要到cmd安装一个淘宝镜像 (在cmd上面执行): npm install -g cnpm --regis ...
- 在mybatis中调用存储过程的时候,不能加工语句
select count(0) from ({call pkg_business.P_ZZS_LYFPHJSKJQK ('2018-04')}) 这是错误的.
- 初窥Java之一
一.常用的dos命令 打开命令提示符窗口的方式: ① win + R --> 输入cmd --> 回车 ② 开始 --> 搜索程序和文件的框中输入 cmd --> 回车 ③ ...
- Typescript中抽象类与接口详细对比与应用场景介绍
现如今,TS正在逐渐成为前端OO编程的不二之选,以下是我在学习过程中对抽象类和接口做的横向对比. 1. 抽象类当做父类,被继承.且抽象类的派生类的构造函数中必须调用super():接口可以当做“子类” ...