/**
* 批量插入
*
* @param tableName
* @param datas
* @return
*/
public boolean insertBatch(String tableName, List<Map<String, Object>> datas) {
PreparedStatement prepared = null;
Connection connect = new Mysql().getConnection();
try {
connect.setAutoCommit(false); // 设置手动提交
StringBuffer fieldString = new StringBuffer();
StringBuffer paraNo = new StringBuffer(); // 预处理字段“?”
List values = new ArrayList();
boolean flag = true;
for (int i = 0; i < datas.size(); i++) {
for (Object element : datas.get(i).keySet()) {
if (flag) {
fieldString.append("," + element);
paraNo.append(",?");
}
values.add(datas.get(i).get(element));
}
flag = false;

         if (prepared == null) {// 所有参数组成的数组String queryString = "INSERT INTO " + tableName + " (" + fieldString.toString().substring(1)+ ") VALUES (" + paraNo.substring(1) + ")";prepared = connect.prepareStatement(queryString);}// 设置对应参数值for (int j = 0; j < datas.get(i).size(); j++) {prepared.setObject(j + 1, values.get(j));}prepared.addBatch();if (i % 10000 == 0) {prepared.executeBatch();connect.commit();}values.clear();}prepared.executeBatch();connect.commit();return true;} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());} finally {try {if (connect != null) {connect.close();}if (prepared != null) {prepared.close();}} catch (SQLException e) {e.printStackTrace();}}
}

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**

  • 单数据库模式 单数据库模式 需要扩展多数据库或使用主从数据库 在此处进行扩展指定连接数据库 同时修改数据库配置

*/
public class Mysql {
// 连接数据库的参数
private static String url = null;
private static String username = null;
private static String driver = null;
private static String passwd = null;

private static Properties propertie = null;
private static InputStream configStream = null;
/*** 加载驱动,只需要一次,用静态代码块 单数据库模式,需要扩展多数据库或使用主从数据库在此处进行扩展*/
static {try {propertie = new Properties();configStream = Mysql.class.getClassLoader().getResourceAsStream("mysql.properties");propertie.load(configStream);url = propertie.getProperty("url");driver = propertie.getProperty("driver");username = propertie.getProperty("username");passwd = propertie.getProperty("password");Class.forName(driver);} catch (Exception e) {e.printStackTrace();} finally {try {configStream.close();} catch (IOException e) {e.printStackTrace();}configStream = null;}}/*** 获取数据库链接* * @return*/
public Connection getConnection() {Connection con = null;try {con = DriverManager.getConnection(url, username, passwd);} catch (Exception e) {e.printStackTrace();}return con;
}

}

//调用方法

List<Map<String, Object>> datas = new ArrayList<>();
Map<String,Object> user = new HashMap<>();
user.put(字段,对应值);
datas.add(user);
insertBatch(表名, datas);

java实现批量插入相关推荐

  1. 【java】批量插入数据库数据

    在项目中往往需要一次向数据库中插入多条数据,如果使用for循环的方式插入,效率慢且资源消耗高 接下来看看如何批量将数据写入数据库中 一.Dao ReportSampleDao.java文件 impor ...

  2. java多线程批量插入实战

    批量写入的难点是困扰很多程序员的地方,在这里提供一下自己的思路 拆大为小,把一个大集合拆分成小集合,可以通过工具类实现.list拆分工具类 开启线程池,针对集合的大小进行调参,对小集合进行批量更新操作 ...

  3. java实现批量插入数据

    //业务背景:在实现一次性插入上万条数据会报错误,所有要批量插入数据 public void addCouponCode(List<CouponCodeEntity> lists){if ...

  4. java 高效批量插入 sqlserver 数据库

    @Testpublic void clockingIn_Img() throws Exception{DbJdbc idb = DbMaster.getIDB("JXT");Lis ...

  5. java mvc 批量插入_请教mysql spring mvc +mybatis中批量插入的问题?

    dao实现文件中函数: @Override public int insertContentList( List list) { Map params = createMap(); params.pu ...

  6. java sqls.add(),java 高效批量插入 sqlserver 数据库

    PHP读取Excel数据写入数据库(包含图片和文字) public function test(){ $exts = 'xlsx'; //导入PHPExcel类库,因为PHPExcel没有用命名空间, ...

  7. Oracle model iterate,ibatis组合Oracle的iterate insert批量插入

    ibatis批量插入oracle数据库 INSERT INTO SYS_ROLE_MENU( ROLE_ID, MENU_ID ) SELECT A.* FROM ( SELECT #list[].k ...

  8. java 原生sql批量插入,Java对象集合转MySQL批量插入语句

    Mybatis的批量插入确实很好用,但是当数据量特别大的时候可能一次批量插入2000条数据就死翘翘了.怎么办呢?当然是原生sql是最快的啦,10000条数据秒入无压力.下面是将对象集合拼接成批量插入M ...

  9. Java mybatis实现mysql批量插入

    记录下来方便自己,同时也希望能对比较迷惑的小盆友有所帮助 1.把批量插入的数据生成一个List集合 2.用java控制一次插入的条数和集合 // 每次插入10条int len = count, inc ...

最新文章

  1. CSS控制字体在一行内显示不换行
  2. 多个servlet配制方法
  3. ant 改变表格数据_学不会这几个操作,面试时千万别说自己精通数据分析
  4. 窄行打印纸打印机规格_电脑打印纸的尺寸和打印机纸张规格的设置
  5. LIVE555再学习 -- Linux 下编译
  6. 业务中台建设与应用_容易网业务中台建设,助力企业数字化转型
  7. openwrt 19 overlay 空间不足_重视 | 山西一矿井瓦斯爆炸,有限空间作业切记注意安全...
  8. LeetCode 500. 键盘行
  9. 威盾PHP加密专家解密
  10. 中晋最新消息2020年_最新消息!洛阳市第一高级中学发布2020年招生简章
  11. EndNote X7集成到office word2016(原有EndNote选项卡,却突然消失)
  12. CCF-CSP真题《202206-2—寻宝大冒险》思路+python满分题解
  13. Excel 技巧大全之 01 如何将公式应用于 Excel 中的整列(5 种简单方法)
  14. LM2596和LM2576区别,开关电源芯片LM2576和LM2596为什么开关频率越高,输出接电感值和电容值就越小呢?电感电容体积小,有利于减小开关电源整体模块的体积
  15. Problem L: 数羊————思维不严谨
  16. unity引擎发展史
  17. 助教日志_沈航1.2班第一二周作业
  18. 数据结构的基本概念(ADT 抽象数据类型 数据结构三要素)
  19. 学写网页 #05# CSS Mastery 笔记 1~3
  20. CDA数据分析师课程分享

热门文章

  1. 中小企业选择OA移动办公软件时,一定要考虑这些因素
  2. 李洵同款爱心加红蓝动态线条爱心
  3. mysql年月分表_MySQL 按日期分表
  4. QUIC的那些事 | 包类型及格式
  5. 内固定取出术后护理_内固定物取出方法及手术技巧图文汇总
  6. python会导致电脑死机吗_什么原因会导致电脑经常死机!急
  7. ASR项目实战-后处理
  8. 纤亿通带您了解什么是综合布线
  9. 亚马逊的18种关联因素及防范方式
  10. 职教云python程序设计答案_智慧职教云课堂Python程序设计基础题目及答案