当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。
 JDBC的批量处理语句包括下面两个方法:
  addBatch(String):添加需要批量处理的SQL语句或是参数;
  executeBatch():执行批量处理语句;
通常我们会遇到两种批量执行SQL语句的情况:
 多条SQL语句的批量处理;

 一个SQL语句的批量传参;


测试:
 向 Oracle 的 customers 数据表中插入 10 万条记录。测试如何插入, 用时最短。
1、使用 Statement,用时 39567ms

@Test
public void testBatchWithStatement(){Connection connection = null;Statement statement = null;String sql = null;try {connection = JDBCTools.getConnection();JDBCTools.beginTx(connection);statement = connection.createStatement();long begin = System.currentTimeMillis();for(int i = 0; i < 100000; i++){sql = "INSERT INTO customers VALUES(" + (i + 1)+ ", 'name_" + i + "', '29-6月 -13')";statement.addBatch(sql);}long end = System.currentTimeMillis();System.out.println("Time: " + (end - begin)); //39567JDBCTools.commit(connection);} catch (Exception e) {e.printStackTrace();JDBCTools.rollback(connection);} finally{JDBCTools.releaseDB(null, statement, connection);}
}

2、使用 PreparedStatement。用时 9819ms

@Test
public void testBatchWithPreparedStatement(){Connection connection = null;PreparedStatement preparedStatement = null;String sql = null;try {connection = JDBCTools.getConnection();JDBCTools.beginTx(connection);sql = "INSERT INTO customers VALUES(?,?,?)";preparedStatement = connection.prepareStatement(sql);Date date = new Date(new java.util.Date().getTime());long begin = System.currentTimeMillis();for(int i = 0; i < 100000; i++){preparedStatement.setInt(1, i + 1);preparedStatement.setString(2, "name_" + i);preparedStatement.setDate(3, date);preparedStatement.executeUpdate();}long end = System.currentTimeMillis();System.out.println("Time: " + (end - begin)); //9819JDBCTools.commit(connection);} catch (Exception e) {e.printStackTrace();JDBCTools.rollback(connection);} finally{JDBCTools.releaseDB(null, preparedStatement, connection);}
}

3、使用Batch批量操作,用时 569ms

@Test
public void testBatch(){Connection connection = null;PreparedStatement preparedStatement = null;String sql = null;try {connection = JDBCTools.getConnection();JDBCTools.beginTx(connection);sql = "INSERT INTO customers VALUES(?,?,?)";preparedStatement = connection.prepareStatement(sql);Date date = new Date(new java.util.Date().getTime());long begin = System.currentTimeMillis();for(int i = 0; i < 100000; i++){preparedStatement.setInt(1, i + 1);preparedStatement.setString(2, "name_" + i);preparedStatement.setDate(3, date);//"积攒" SQL preparedStatement.addBatch();//当 "积攒" 到一定程度, 就统一的执行一次. 并且清空先前 "积攒" 的 SQLif((i + 1) % 300 == 0){preparedStatement.executeBatch();preparedStatement.clearBatch();}}//若总条数不是批量数值的整数倍, 则还需要再额外的执行一次. if(100000 % 300 != 0){preparedStatement.executeBatch();preparedStatement.clearBatch();}long end = System.currentTimeMillis();System.out.println("Time: " + (end - begin)); //569JDBCTools.commit(connection);} catch (Exception e) {e.printStackTrace();JDBCTools.rollback(connection);} finally{JDBCTools.releaseDB(null, preparedStatement, connection);}
}

Jdbc系列八:批量处理相关推荐

  1. JAVA面试常考系列八

    转载自 JAVA面试常考系列八 题目一 JDBC是什么? JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系 ...

  2. PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]

    PGL图学习之图神经网络ERNIESage.UniMP进阶模型[系列八] 原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetai ...

  3. 老调重弹:JDBC系列 之 JDBC层次结构和基本构成

    前言 最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,老调重弹,好好总结一番,作为自己的笔记 ...

  4. (八)批量视频处理、批量视频编辑、背景移除/去背景/换背景/抠图/抠像代码/实时抠图、实时抠像、人像去背景、背景消除、摄像头背景移除

    (八)批量视频处理.批量视频编辑.背景移除/去背景/换背景/抠图/抠像代码/实时抠图.实时抠像.人像去背景.背景消除.摄像头背景移除 当前短视频飞速发展,视频博主经常需要对大量视频进行编辑.处理,商用 ...

  5. 【×××系列八】Dynamic Multipoint *** for IPv6 详解

    [×××系列八]Dynamic Multipoint *** for IPv6 详解 一.前言 由于涉及IPV6加密,所以根据思科标准此次配置使用思科7200系列高级企业版IOS (详情参考我的上一篇 ...

  6. 【深入浅出MyBatis系列八】SQL自动生成插件

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 深入浅出MyBatis系列 [深入浅出MyBatis系列一]MyBatis入门 [深入浅出MyBatis系列二]配置 ...

  7. java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作

    什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...

  8. 数学之美 系列八-- 贾里尼克的故事和现代语言处理

    数学之美 系列八-- 贾里尼克的故事和现代语言处理 读者也许注意到了,我们在前面的系列中多次提到了贾里尼克这个名字.事实上,现代语音识别和自然语言处理确实是和它的名字是紧密联系在一起的.我想在这回的系 ...

  9. information_schema系列八(事物,锁)

    information_schema系列八(事物,锁) 今天我们主要看一下MySQL information_schema里面的关于innodb的锁和事物的两三个系统表: 看一下锁对应的sql: se ...

最新文章

  1. 程序员面试题精选100题(60)-判断二叉树是不是平衡[数据结构]
  2. 《Android安全技术揭秘与防范》—第8章8.5节Hook检测/修复
  3. 【2015年第4期】大数据引领教育未来:从成绩预测谈起
  4. 茄子快传 java,如何打造茄子快传这样一款Android应用(项目已完成,github)
  5. Oracle 学习笔记二 Create table
  6. cnn stride and padding_经典CNN网络解析
  7. C++socket编程(六):6.3 并发测试工具ab的使用(apache工具)
  8. [HTML5]块和内联元素的嵌套
  9. oracle10rac asm hpux,oracle 10g rac asm上面的控制文件损坏既增加方法
  10. 最近出现Matlab2010b点击matlab.exe运行时,不断提示Activate MathWorks Software,无法正常使用
  11. 大数据前端个人提升与团队规划
  12. 【Webpack 性能优化系列(2) - source-map】
  13. Android技术知识点:如何添加字体资源
  14. softmax溢出问题
  15. E4A 易安卓一些常见的小问题
  16. matlab2014simulink中的三相晶闸管整流桥怎么找_哈尔滨有源滤波组件HPD2000-100-4L坏了怎么办 - 哈尔滨照明工业...
  17. ACM如何入门,ACM竞赛需要学习哪些算法?
  18. 抗渗等级p6是什么意思_混凝土抗渗等级w4是什么意思?
  19. vscode配置c/c++编译环境(最终解决办法)
  20. theHarvester使用

热门文章

  1. Windows xp .iso下载大全——超全面超难找的收藏版(三)
  2. 计算机毕设Python+Vue医疗健康查询系统(程序+LW+部署)
  3. 爬取起点网站图书信息(书名、作者、简介、图片url)
  4. scratch鲜为人知的技巧-初级篇
  5. 微信小程序如何发布小程序?
  6. USRP工作流程及各部分功能
  7. Java的三大版本和JDK,JRE,JVM的概念
  8. 微信公众平台相关信息
  9. Dracula这个东西
  10. 不同版本的VS项目复制出现“PDB 格式不兼容;请删除并重新生成”的问题解决方法