文档章节

JDBC大批量插入数据性能优化

micical
 micical
发布于 2016/01/22 16:43
字数 218
阅读 482
收藏 8

把最终测试效率最高的方式记录一下,在mysql5.6下下面这种方式比batchUpdate的方式要快N倍

package com.jdbc.batch;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class BufferQuery {
    private static Connection mysqlConn = null;
    private static ResultSet rs = null;
    // 总条数
    private static int allCount = 10000;
    // 分批条数
    private static int preCount = 1000;
    // 计数器
    private static int count = 0;
 
    private static String insertSQL = "insert into users(firstname, lastname, age) values(?, ?, ?)";
 
    private static PreparedStatement mysqlPs = null;
 
    public static void main(String[] args) throws SQLException {
        try {
            StringBuilder sb = new StringBuilder();
            sb.append("insert into users(firstname, lastname, age) values");
            mysqlConn = DBUtils.getMySqlConn();
            mysqlPs = mysqlConn.prepareStatement(insertSQL);
            mysqlConn.setAutoCommit(false);
            long start = System.currentTimeMillis();
             
            for (int i = 1; i <= allCount; i++) {
                if(i > 1) sb.append(",");
                sb.append("('aa"+ i +"','bb',23)");   
 
                if(i % preCount == 0){
                    System.out.println("导入进行===>" + (++count * preCount) + "条");               
                }               
            }
            mysqlPs.executeUpdate(sb.toString());
             
             
            long end = System.currentTimeMillis();
            System.out.println("数据导入完毕,所用时间为: " + (end - start) + " ms");
 
        } catch (Exception e) {
            mysqlConn.rollback();
            System.out.println("数据出错,已进行回滚");
            throw new RuntimeException();
        } finally {
            mysqlConn.commit();
            DBUtils.free(rs, mysqlPs, mysqlConn);
        }
    }
 
}



© 著作权归作者所有

micical
粉丝 3
博文 37
码字总数 10903
作品 0
茂名
私信 提问
一种简单的数据库性能测试方法

这两天接到一个任务,要测试一个服务器的性能,客户要求向数据库内 1000/s(每插入一千条数据) 的处理能力,当时脑子赌赛了,想的是用LR来进行,由于LR接触不深,只知道LR实现参数化的时候可...

长平狐
2013/03/12
187
0
第 13 章 批量处理(Batch processing)

第 13 章 批量处理(Batch processing) 使用Hibernate将 100 000 条记录插入到数据库的一个很自然的做法可能是这样的 Session session = sessionFactory.openSession();Transaction tx = se...

扁-哥
2013/03/28
0
0
jdbc批量插入实现大批量数据快速插入

今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入。于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.execute...

itgangan
2014/02/27
0
5
从 Java 代码到 Java 堆

从 Java 代码到 Java 堆 分析是一种美德,PS原文地址:http://www.ibm.com/developerworks/cn/java/j-codetoheap/ 理解和优化您的应用程序的内存使用 本文将为您提供 Java™ 代码内存使用情况...

北极之北
2016/03/10
568
3
08《Java核心技术》之Vector、ArrayList、LinkedList有何区别?

一、提出问题 我们在日常的工作中,能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据结构不尽相同,比如我们最早接触到的 C 语言,需要自己实现很多基础数据结构,管理和操...

飞鱼说编程
2018/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
19分钟前
0
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
20分钟前
0
0
UI 设计中的渐变

>**简评:**渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计。从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 —— 独特、...

极光推送
26分钟前
0
0
powerdesigner name 转注释vb脚本

Option Explicit ValidationMode = True InteractiveMode = im_BatchDim mdl ' the current model' get the current active model Set mdl = ......

zhu97
30分钟前
1
0
V2Ray的安装与使用

1 1. bash <(curl -s -L https://git.io/v2ray.sh)yum update -y && yum install curl -y安装好 curl 之后就能安装脚本了输入快捷管理命令v2ray后,开始进行v2ray服务端配置...

吕湘颖
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部