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语句一条又 ...
随机推荐
- windows下面使用nssm设置新的服务实现开机自启等
1.下载: http://nssm.cc/download/?page=download 2.解压: 根据自己的系统选择相应的32bit或者64bit,然后将相应的可执行文件拷贝到系统环境中.配置环境 ...
- AtCoder Grand Contest 026 (AGC026) E - Synchronized Subsequence 贪心 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC026E.html 题目传送门 - AGC026E 题意 给定一个长度为 $2n$ 的字符串,包含 $n$ ...
- nacos-server集群 安装、运行(ubuntu)
下载.解压 wget -P /opt/downloads https://github.com/alibaba/nacos/releases/download/1.0.0/nacos-server-1 ...
- 062 SparkStream内部原理
1.DStream 内部是一系列的RDD组成的,每个RDD与RDD的产生时间形成一个pair保存在内存中(下面有) RDD包含了对应时间段的所有block数据. 2.DStream下的方法 /** T ...
- Linux下C语言的进程控制编程
代码: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/ty ...
- 3dsmax不同版本 pyside qt UI 设置max窗口为父窗口的方法
3dsmax不同版本 pyside qt widget 设置 max 窗口为父窗口的方法 前言: 3dsmax 在 2014 extension 之后开始集成 Python 和 PySide,但是在版 ...
- 【python】数据库
No1: [SQLite] 插入 # 导入SQLite驱动: >>> import sqlite3 # 连接到SQLite数据库 # 数据库文件是test.db # 如果文件不存在, ...
- Java数组实现循环队列的两种方法
用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...
- Spark 常见问题集合
一.Spark 为什么比 MapReduce 要高效? 举一个例子: select a.state,count(*),AVERAGE(c.price) from a join b on (a.id=b ...
- 响应式网页:用em,rem设置网页字体大小自适应
「rem」是指根元素(root element,html)的字体大小,好开心的是,从遥远的 IE6 到版本帝 Chrome 他们都约好了,根元素默认的 font-size 都是 16px.这样一个新的 ...