JDBC: 批量处理提高SQL处理速度
引用:忘了
当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率
JDBC的批量处理语句包括下面两个方法:
addBatch(String):添加需要批量处理的SQL语句或是参数;
executeBatch();执行批量处理语句;
通常我们会遇到两种批量执行SQL语句的情况:
多条SQL语句的批量处理;
一个SQL语句的批量传参;
测试代码:
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.Statement; import org.junit.Test; import xuezaipiao1.JDBC_Tools;
/**
* 向Oracle 的 temp 数据表中添加 10万 条记录
* 测试如何插入,用时最短
*/ public class JDBCTest { /**
*
* 1.使用 Statement .
* 测试用时:35535
*/
@Test
public void testBbatchStatement() {
Connection conn = null;
Statement statement = null;
String sql = null;
try {
conn = JDBC_Tools.getConnection();
JDBC_Tools.beginTx(conn); long beginTime = System.currentTimeMillis();
statement = conn.createStatement();
for(int i = 0;i<100000;i++){
sql = "INSERT INTO temp values("+(i+1)
+",'name_"+(i+1)+"','13-6月 -15')";
statement.executeUpdate(sql);
}
long endTime = System.currentTimeMillis();
System.out.println("Time : "+(endTime - beginTime));
JDBC_Tools.commit(conn);
} catch (Exception e) {
e.printStackTrace();
JDBC_Tools.rollback(conn);
}finally{
JDBC_Tools.relaseSource(conn, statement);
}
} /**
* 使用PreparedStatement
* 测试用时:9717
*/
@Test
public void testBbatchPreparedStatement() {
Connection conn = null;
PreparedStatement ps = null;
String sql = null;
try {
conn = JDBC_Tools.getConnection();
JDBC_Tools.beginTx(conn); long beginTime = System.currentTimeMillis();
sql = "INSERT INTO temp values(?,?,?)";
ps = conn.prepareStatement(sql);
Date date = new Date(new java.util.Date().getTime());
for(int i = 0;i<100000;i++){
ps.setInt(1, i+1);
ps.setString(2, "name_"+i);
ps.setDate(3, date);
ps.executeUpdate();//
}
long endTime = System.currentTimeMillis();
System.out.println("Time : "+(endTime - beginTime));
JDBC_Tools.commit(conn);
} catch (Exception e) { e.printStackTrace();
JDBC_Tools.rollback(conn);
}finally{
JDBC_Tools.relaseSource(conn, ps);
}
} /**
* 测试用时 : 658
*/
@Test
public void testBbatch() {
Connection conn = null;
PreparedStatement ps = null;
String sql = null;
try {
conn = JDBC_Tools.getConnection();
JDBC_Tools.beginTx(conn); long beginTime = System.currentTimeMillis();
sql = "INSERT INTO temp values(?,?,?)";
ps = conn.prepareStatement(sql);
Date date = new Date(new java.util.Date().getTime());
for(int i = 0;i<100000;i++){
ps.setInt(1, i+1);
ps.setString(2, "name_"+i);
ps.setDate(3, date); //积攒SQL
ps.addBatch(); //当积攒到一定程度,就执行一次,并且清空记录
if((i+1) % 300==0){
ps.executeBatch();
ps.clearBatch();
}
}
//总条数不是批量值整数倍,则还需要在执行一次
if(100000 % 300 != 0){
ps.executeBatch();
ps.clearBatch();
}
long endTime = System.currentTimeMillis();
System.out.println("Time : "+(endTime - beginTime));
JDBC_Tools.commit(conn);
} catch (Exception e) { e.printStackTrace();
JDBC_Tools.rollback(conn);
}finally{
JDBC_Tools.relaseSource(conn, ps);
}
}
}
JDBC: 批量处理提高SQL处理速度的更多相关文章
- JDBC批量Insert深度优化(有事务)
环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池 测试的方案: 执行10万次Insert语句,使用不同方 ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- JDBC批量处理
转载自http://www.cnblogs.com/xdp-gacl/p/3983253.html 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而 ...
- 三种JDBC批量插入编程方法的比较
JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一,使用PreparedStat ...
- jdbc批量插入
分享牛,分享牛原创.有这样一个需求,文本文件中的数据批量的插入mysql,怎么用jdbc方式批量插入呢? jdbc默认提供了批量插入的方法,可能用一次就忘记了,这里做笔记记录一下jdbc批量插入吧. ...
- mybatis 的批量更新操作sql
转: mybatis 的批量更新操作sql 2018年07月23日 10:38:19 海力布 阅读数:1689 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- JDBC批量执行executeBatch
JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这 ...
- JDBC批量插入数据优化,使用addBatch和executeBatch
JDBC批量插入数据优化,使用addBatch和executeBatch SQL的批量插入的问题,如果来个for循环,执行上万次,肯定会很慢,那么,如何去优化呢? 解决方案:用 preparedSta ...
- JDBC批量操作性能提升
JDBC 当使用INSERT INTO....VALUES()语句批量插入的时候,应该使用JDBC的PreparedStatement的批量操作方法,而不是採用一条一条运行的方法. 比如(来源:htt ...
随机推荐
- uva 1587(Box UVA - 1587)
题目大意是给定6个数对,每个数对代表一个面的长和宽,判断这6个面是否能构成一个长方体. 这种题一看很复杂,但是只要不想多了实际上这就是一个水题... 首先说明一下判断的思路: 1.长方体是有三个对面的 ...
- 【codeforces 797E】Array Queries
[题目链接]:http://codeforces.com/problemset/problem/797/E [题意] 给你一个n个元素的数组; 每个元素都在1..n之间; 然后给你q个询问; 每个询问 ...
- Java SE 之 递归方法
public void removeSon(String id, List<Dept> deptList) { String hql = "from Dept where par ...
- Spring MVC-集成(Integration)-生成JSON示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_json.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如 ...
- no_merge hint
This is tested in 10gR2. SQL> select * from v$version; BANNER ----------------------------------- ...
- linux环境下安装varnish
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. sudo apt-get insta ...
- Codeforces Round #306 (Div. 2) D
D. Regular Bridge time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- android开发之使用SQLite数据库(db文件)
在开发中,有时须要使用db文件数据库.所以就须要将其导入项目,再将其使用程序写入到应用的db文件下使用. 代码非常easy.能够拿来直接使用. 要使用须要两个步骤: 1.创建raw文件.导入db文件. ...
- 使用Linq 查询数据 构建对象 select new{}
linq 查询数据 /// <summary> /// 汽车品牌及车型 /// </summary> /// <returns></returns> p ...
- jenkins集成多个项目
https://www.cnblogs.com/gossip/p/5961376.html 需要jenkins版本高点 安装插件:Multijob plugin