批量插入之分批事务插入
来源:互联网 发布:java 效率最高的排序 编辑:程序博客网 时间:2024/05/24 02:07
方案:分批事务插入//DataModel 为自定义的数据模型类,dataList 即传入的即将要插入的数据集合; public int insertData(List dataList) throws ClassNotFoundException, SQLException { //设定每批、每次事务插入多少条数据; int itemNum = 1000; //开始时间; Long begin = new Date().getTime(); // 创建sql前缀 String prefix = "INSERT INTO tb_ncdc VALUES "; Connection connection = new DBUtil().getDbCon(); // PrepareStatement类存放每条记录对应的字段值; PreparedStatement preparedStatement= connection.prepareStatement(""); // 创建sql后缀 StringBuffer suffix = new StringBuffer(); // 设置事务为非自动提交 connection.setAutoCommit(false); //根据总的数据量计算需要分多少次事务插入; int numTrans = dataList.size() / itemNum + 1; //设定首次事务中的数据在集合中的索引为0; int numData = 0; // 外层循环,j代表提交事务次序; for (int j = 1; j <= numTrans; j++) { // 从索引numData开始查找总数为itemNum个数据,即为本批要插入的数据量; for (int i = numData; i < numData + itemNum; i++) { //判定如果是最后一批,可能会不足itemNum数量,则够数结束,防止数组越界; if (i == dataList.size()) { break; } // 构建sql后缀 suffix.append("('" + dataList.get(i).getSTN() + "','" + dataList.get(i).getWBAN() + "','" + dataList.get(i).getYEARMODA() + "','" + dataList.get(i).getTEMP() + "','" + dataList.get(i).getDEWP() + "','" + dataList.get(i).getSLP() + "','" + dataList.get(i).getSTP() + "','" + dataList.get(i).getVISIB() + "','" + dataList.get(i).getWDSP() + "','" + dataList.get(i).getMXSPD() + "','" + dataList.get(i).getGUST() + "','" + dataList.get(i).getMAX() + "','" + dataList.get(i).getMIN() + "','" + dataList.get(i).getPRCP() + "','" + dataList.get(i).getSNDP() + "','" + dataList.get(i).getFRSHTT() + "'),"); } // 构建完整sql String sql = prefix + suffix.substring(0, suffix.length() - 1); // 添加sql批; preparedStatement.addBatch(sql); // 执行sql批; preparedStatement.executeBatch(); // 提交本次事务 connection.commit(); // 清空上一次的sql后缀; suffix = new StringBuffer(); numData += itemNum; } // 所有数据库操作结束后记得关闭连接,减少内存的占用; preparedStatement.close(); connection.close(); // 结束时间 Long end = new Date().getTime(); // 耗时 System.out.println("插入" + dataList.size() + "条数据的总时间为 : "+ (end - begin) + " ms"); return 1; }
阅读全文
0 0
- 批量插入之分批事务插入
- php分批次批量插入数据
- Mysql 批量插入 事务插入 性能对比
- Mysql批量插入事务插入性能对比
- FMDB事务批量插入数据
- Yii2 开启事务 批量插入
- android批量插入数据(使用事务)
- android批量插入数据(使用事务)
- 使用事务操作SQLite数据批量插入
- C#通过事务批量插入数据库
- QT SQLITE使用事务批量插入数据
- mysql分批次插入VS一次性插入
- Hibernate、JDBC之批量插入
- 批量插入数据之nologging
- 批量插入数据之nologging
- ibatis、hiberate之批量插入
- Yii2之批量插入数据
- mybatis之批量插入和批量删除
- opencv学习——cv2.drawMatches()与cv2.drawMatchesKnn()区别
- 不同的路径
- 打开Charles,提示:您需要安装旧 Java SE 6 运行环境才能打开“Charles”。
- python 标准库
- [杂题] Codeforces #577B. Modulo Sum
- 批量插入之分批事务插入
- [编程题]进制转换
- 对于java中小数类型用Double或Float进行加减乘除时缺失精度问题
- Spark-SQL之DataFrame操作大全
- 10.2 HTTP 2.0 简介
- Ansible的配置文件:
- Java学习笔记(3)——String类详解
- 跳转至websocket聊天页面时传递简单信息
- push_back和emplace_back的区别