Java代码批量插入数据到MySQL
1、批量插入
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random; public class SQLGenApplication {
public static void main(String[] args) throws IOException { StringBuilder insertBuf = new StringBuilder("INSERT INTO `table1` (`id`, `uid`, `a`, `b`) VALUES");
String values = "('%s', '%s', '%s.00', '%s.00'),";
BufferedReader fis = new BufferedReader(new FileReader("fileParam.txt"));
String line = null;
Random r = new Random(); int cnt = 0;
int batch = 0;
int perCnt = 2500;
while((line = fis.readLine()) != null) { long id = Long.parseLong(line.substring(8)); int i = r.nextInt(100);
while(i <= 0 ) {
i = r.nextInt(100);
}
int i2 = r.nextInt(100);
while(i2 < i ) {
i2 = r.nextInt(100);
}
insertBuf.append(String.format(values, id, line, i, i2));
if(cnt < perCnt) {
cnt++; } else { insertBuf.deleteCharAt(insertBuf.length()-1);
insertBuf.append(";");
FileWriter fw = new FileWriter("fileSQL" + batch + ".sql");
fw.write(insertBuf.toString());
fw.flush();
fw.close();
cnt = 0;
batch++; insertBuf = new StringBuilder("INSERT INTO `table1` (`id`, `uid`, `a`, `b`) VALUES");
}
}
if(cnt != 0 && cnt < perCnt) { insertBuf.deleteCharAt(insertBuf.length()-1);
insertBuf.append(";");
FileWriter fw = new FileWriter("fileSQL" + batch + ".sql");
fw.write(insertBuf.toString());
fw.flush();
fw.close();
cnt = 0; } fis.close();
}
}
2、存储过程插入
use `数据库名称`;
DELIMITER $$
drop procedure if exists data_100w_gen$$
create procedure data_100w_gen(IN startIdx int, IN endIdx int, IN prefix varchar(1000), IN surfix varchar(1000), out ex_sql_out longtext)
begin
declare ex_sql longtext default prefix;
-- 超时设置
set global delayed_insert_timeout=20000;
set global connect_timeout = 20000;
set global net_read_timeout = 20000;
set global net_write_timeout = 20000;
while startIdx<=endIdx-1 DO
set ex_sql = concat(ex_sql, "(", CAST(startIdx AS CHAR), surfix, ",");
set startIdx=startIdx+1;
end while;
set ex_sql_out = concat(ex_sql, "(", CAST(endIdx AS CHAR), surfix, ";");
-- select ex_sql_out from dual;
end$$ drop procedure if exists data_batch_gen$$
create procedure data_batch_gen(IN startIdx int, IN endIdx int, IN prefix varchar(1000), IN surfix varchar(1000))
begin
declare batchSize int default 25000;
declare batchSize_1 int default batchSize-1;
declare endIdxGen int default 0;
set @ex_sql_out = "";
if(endIdx < batchSize) then
call data_100w_gen(startIdx, endIdx, prefix, surfix, @ex_sql_out);
PREPARE data_gen_prep FROM @ex_sql_out;
EXECUTE data_gen_prep;
DEALLOCATE PREPARE data_gen_prep;
else
while startIdx<=endIdx DO -- 循环开始
set endIdxGen = startIdx + batchSize_1;
if(endIdxGen > endIdx) then
set endIdxGen = endIdx;
end if;
call data_100w_gen(startIdx, endIdxGen, prefix, surfix, @ex_sql_out);
PREPARE data_gen_prep FROM @ex_sql_out;
EXECUTE data_gen_prep;
DEALLOCATE PREPARE data_gen_prep;
set startIdx = endIdxGen + 1;
select endIdxGen from dual; -- 打印每次生成数量
end while; -- 循环结束
end if;
-- select @ex_sql_out from dual;
end$$
delimiter ;
转自:https://onefire.blog.csdn.net/article/details/120015121
Java代码批量插入数据到MySQL的更多相关文章
- Java JDBCI批量插入数据
智能插入:将整批分批,每一千条提交一次,sql注入(安全,使用软解析,提高效率) sql注入攻击:简单例子 select * from table where name='"+un+&quo ...
- MySQL批量插入数据的几种方法
最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...
- Elasticsearch5.x批量插入数据(Java)
先上官方示例代码:官方示例 Java代码: // 批量插入数据 public void InsertBatch() { try { // 设置集群名称 Settings settings = Sett ...
- mybatis foreach批量插入数据:Oracle与MySQL区别
mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...
- 向mysql中批量插入数据的性能分析
MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下 CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 5 ...
- Java使用iBatis批量插入数据到Oracle数据库
Java使用iBatis批量插入数据到Oracle数据库 因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数 ...
- Java 批量插入数据(Oracle)
//批量添加20000条数据用时8秒. try { String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...
- MySQL高级知识(十)——批量插入数据脚本
前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...
- MySQL:JDBC批量插入数据的效率
平时使用mysql插入.查询数据都没有注意过效率,今天在for循环中使用JDBC插入1000条数据居然等待了一会儿 就来探索一下JDBC的批量插入语句对效率的提高 首先进行建表 create tabl ...
随机推荐
- Excel数据导出功能
HTML代码: <a id="aExportData" hidden><span>Export</span></a> <div ...
- 快速上手FastJSON
前言 作为一名后端开发而言肯定会接触数据,把数据提供给前端或者把数据存储起来,目前比较火热的传输格式是json,给前端传json是再常见不过啦,甚至是往db里面直接存入json. 在java层面来说j ...
- 【LeetCode】415. Add Strings 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 [LeetCode] 题目地址:https:/ ...
- 【LeetCode】671. Second Minimum Node In a Binary Tree 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 找出所有值再求次小值 遍历时求次小值 日期 题目地址 ...
- 第十七个知识点:描述和比较DES和AES的轮结构
第十七个知识点:描述和比较DES和AES的轮结构 这是密码学52件事中的第17篇.本周我们描述和比较DES和AES的结构. DES和AES都是迭代分组密码的例子.分组密码通过重复使用一个简单的轮函数来 ...
- Visualizing Data using t-SNE
目录 概 主要内容 Stochastic Neighbor Embedding t-SNE Der Maaten L V, Hinton G E. Visualizing data using t-S ...
- <学习opencv>跨平台和本机windows
/*=========================================================================*/ // 跨平台和本机Windows /*=== ...
- Typec转HDMI+VGA+PD3.0+USB3.0扩展坞四合一芯片方案|CS5268替代AG9321
CS5268是一种高度集成的单芯片,适用于多个细分市场和显示应用,如拓展坞.扩展底座等. 2.CS5268参数说明 总则 USB Type-C规范1.2 HDMI规范v2.0b兼容发射机,数据速率高达 ...
- CS5216 DP转HDMI 1080P方案|CS5216参数|CS5216中文规格书
Capstone CS5216是一款单端口/中继器,具有重新定时功能.它支持交流和直流耦合3.0-Gbps操作,可编程均衡和抖动清除.它包括DP电缆适配器寄存器,可用于识别电缆适配器的功能.这个抖动清 ...
- CS5210设计HDMI to VGA方案|CS5210资料|CS5210设计电路方案
CS5210是一款HDMI转VGA转换器方案,其输出VGA信号可送到CRT/LED显示器,及投影机等,输入HDMI信号可以驳接电脑.PS3,XBOX360.蓝光DVD,输出VGA可以CRT/LED显示 ...