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语句一条又 ...
随机推荐
- select2插件 多选框动态初始化值
转自https://blog.csdn.net/yiyiwyf/article/details/53521980 上一篇讲了select2的多选和大标题设置. 这周做到了修改的功能,需要将旧数据的选项 ...
- mysql分组(五)
MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT ...
- Android ADB命令 adb devices 出现error:protocol fault (no status)
问题背景:安装apk是报error:protocol fault<no status>或error:device not found手机驱动有问题 出现的问题如下:adb devices ...
- spring cloud (二、服务注册安全demo_eureka)
spring cloud (一.服务注册demo_eureka) 加强服务的安全性,我们接下来加上访问的账号密码: 首先需要添加对应的依赖 <!--账号密码认证依赖--> <depe ...
- 007 使用SpringMVC开发restful API五--异常处理
一:任务 1.任务 Spring Boot中默认的错误机制处理机制 自定义异常处理 二:Spring Boot中的默认错误处理机制 1.目前 浏览器访问的时候, restful 接口主要是根据状态码进 ...
- day14,函数的使用方法:生成器表达式,生成器函数
生成器表达式: #列表推导式 # y = [1,2,3,4,5,6,7,8] # x = [1,4,9,16,25,36,49,64] # x = [] # for i in y: # x.appen ...
- 电信项目java补充类
一.DecimalFormat 1.概述 public class DecimalFormat extends NumberFormat DecimalFormat是格式为十进制数的NumberFor ...
- python-飞机大战
效果图 main.py import time import pygame from EnemyPlane import EnemyPlane from HeroPlane import HeroPl ...
- POJ2387 Til the Cows Come Home【Kruscal】
题目链接>>> 题目大意: 谷仓之间有一些路径长度,然后要在这些谷仓之间建立一些互联网,花费的成本与长度成正比,,并且要使这些边连起来看的像一课“树”,然后使成本最大 解题思路: 最 ...
- CLR Via第一 章 知识点整理(3)CLR执行程序集的IL代码
在了解CLR运行之前让我们先简单了解一下IL 除了编译器编译的IL代码,IL也是一种汇编语言,也就是说我们可以直接编写IL代码,当然也有对应的IL编译器,值得一提的是对于面向CLR的其他语言,CLR只 ...