隐藏页面特效

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

 


__EOF__

本文作者往心。
本文链接https://www.cnblogs.com/lx06/p/15688797.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   往心。  阅读(1532)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
历史上的今天:
2020-12-14 jsp标签问题
点击右上角即可分享
微信分享提示