1. 批量处理JDBC语句,提高处理速度。
  2. 当需要成批的的插入或更新记录时可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率。
  3. 批量处理的方法:
    • ——addBatch(String):添加需要批量处理的SQL语句或是参数。
    • ——executeBatch():执行批量处理语句。

      *通常我们会遇到两种批量执行SQL语句的情况:
    • ——多条SQL语句批量处理
    • ——一条SQL语句的批量传参
  4. 以下三个方法使用了三种批量处理方式以及使用时间分别为:

    *Statement使用时间:18271毫秒

    *PreparedStatement使用时间:13808毫秒

    *JDBC批处理:2046毫秒
  5. 实例
  1. public class Volume_11 {
  2. /**
  3. * 1.向Sql Server中表customers插入100000条记录。
  4. * 使用statement,花费时间:18271毫秒
  5. */
  6. @Test
  7. public void testBatchWithStatement(){
  8. Connection conn = null;
  9. Statement statement = null;
  10. String sql = null;
  11. try {
  12. conn = TestTools.getConnection();
  13. //事务开始
  14. TestTools.beginTx(conn);
  15. statement = conn.createStatement();
  16. //开始计时
  17. long begin = System.currentTimeMillis();
  18. for(int i = 0; i < 100000; i++){
  19. sql = "INSERT INTO customers VALUES('"+
  20. (i+1)+"','name_"+i+"','29-6月-13')";
  21. statement.executeUpdate(sql);
  22. }
  23. //计时结束
  24. long end = System.currentTimeMillis();
  25. System.out.println("时间:"+(end - begin));
  26. //事务提交
  27. TestTools.commit(conn);
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. //事务回滚
  31. TestTools.rollback(conn);
  32. }finally{
  33. TestTools.release(statement, conn);
  34. }
  35. }
  36. /**
  37. * 2.向Sql Server中表customers插入100000条记录。
  38. * 使用Preparedstatement,花费时间:13808毫秒
  39. */
  40. @Test
  41. public void testBatchWithPreparedstatament(){
  42. Connection conn = null;
  43. PreparedStatement preparedstatement = null;
  44. String sql = null;
  45. try {
  46. conn = TestTools.getConnection();
  47. //事务开始
  48. TestTools.beginTx(conn);
  49. sql = "INSERT INTO customers VALUES(?,?,?)";
  50. preparedstatement = conn.prepareStatement(sql);
  51. Date date = new Date(new java.util.Date().getTime());
  52. //开始计时
  53. long begin = System.currentTimeMillis();
  54. for(int i = 0; i < 100000; i++){
  55. preparedstatement.setInt(1, (i+1));
  56. preparedstatement.setString(2, "name_"+i);
  57. preparedstatement.setDate(3, date);
  58. preparedstatement.executeUpdate();
  59. }
  60. //计时结束
  61. long end = System.currentTimeMillis();
  62. System.out.println("时间:"+(end - begin));
  63. //事务提交
  64. TestTools.commit(conn);
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. //事务回滚
  68. TestTools.rollback(conn);
  69. }finally{
  70. TestTools.release(preparedstatement, conn);
  71. }
  72. }
  73. /**
  74. * 3.向Sql Server中表customers插入100000条记录。
  75. * 使用JDBC批处理,花费时间:2046毫秒
  76. */
  77. @Test
  78. public void testBatch(){
  79. Connection conn = null;
  80. PreparedStatement preparedstatement = null;
  81. String sql = null;
  82. try {
  83. conn = TestTools.getConnection();
  84. //事务开始
  85. TestTools.beginTx(conn);
  86. sql = "INSERT INTO customers VALUES(?,?,?)";
  87. preparedstatement = conn.prepareStatement(sql);
  88. Date date = new Date(new java.util.Date().getTime());
  89. //开始计时
  90. long begin = System.currentTimeMillis();
  91. for(int i = 0; i < 100000; i++){
  92. preparedstatement.setInt(1, (i+1));
  93. preparedstatement.setString(2, "name_"+i);
  94. preparedstatement.setDate(3, date);
  95. //"积攒"300条记录之后一块提交到数据库
  96. preparedstatement.addBatch();
  97. if((i + 1) % 300 == 0){
  98. preparedstatement.executeBatch();//执行提交
  99. preparedstatement.clearBatch();//清除积攒的记录
  100. }
  101. }
  102. //若总条数不是积攒数的整数倍,则需要额外的在执行一次,比如总条数400,积攒数300,则执行一次之后还有100
  103. //条记录,100%300不等于0无法提交,所以需要再判断一下是否需要再提交一次。
  104. if(100000 % 300 != 0){
  105. preparedstatement.executeBatch();//执行提交
  106. preparedstatement.clearBatch();//清除积攒的记录
  107. }
  108. //计时结束
  109. long end = System.currentTimeMillis();
  110. System.out.println("时间:"+(end - begin));
  111. //事务提交
  112. TestTools.commit(conn);
  113. } catch (Exception e) {
  114. e.printStackTrace();
  115. //事务回滚
  116. TestTools.rollback(conn);
  117. }finally{
  118. TestTools.release(preparedstatement, conn);
  119. }
  120. }
  121. }

JDBC(10)—批处理的更多相关文章

  1. JDBC进行批处理

    转自 http://mousepc.iteye.com/blog/1131462 业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升 ...

  2. 使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  3. javaweb学习总结(三十六)——使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  4. JavaWeb学习笔记(十五)—— 使用JDBC进行批处理

    一.什么是批处理 批处理就是一批一批的处理,而不是一个一个的处理! 当你有10条SQL语句要执行时,一次向服务器发送一条SQL语句,这么做效率上很差!处理的方案是使用批处理,即一次向服务器发送多条SQ ...

  5. JDBC进行批处理Batch

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  6. 四.使用JDBC进行批处理操作

    1 create table testbatch 2 ( 3 id int primary key, 4 name varchar(20) 5 ); 在实际的项目开发中,有时候需要向数据库发送一批SQ ...

  7. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  8. JavaWeb学习总结(十一)--JDBC之批处理

    一.批处理的介绍 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.批处理只针对更新(增.删.改)语句,批 ...

  9. JDBC的批处理操作三种方式

    SQL批处理是JDBC性能优化的重要武器,批处理的用法有三种. package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import ...

  10. JDBC之批处理

    JDBC之批处理 现在有这么一个需求,要求把2000条记录插入表中,如果使用java代码来操作,我们可以使用Statement或者PreparedStatement来实现,通过循环来把SQL语句一条又 ...

随机推荐

  1. select2插件 多选框动态初始化值

    转自https://blog.csdn.net/yiyiwyf/article/details/53521980 上一篇讲了select2的多选和大标题设置. 这周做到了修改的功能,需要将旧数据的选项 ...

  2. mysql分组(五)

    MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT ...

  3. Android ADB命令 adb devices 出现error:protocol fault (no status)

    问题背景:安装apk是报error:protocol fault<no status>或error:device not found手机驱动有问题 出现的问题如下:adb devices ...

  4. spring cloud (二、服务注册安全demo_eureka)

    spring cloud (一.服务注册demo_eureka) 加强服务的安全性,我们接下来加上访问的账号密码: 首先需要添加对应的依赖 <!--账号密码认证依赖--> <depe ...

  5. 007 使用SpringMVC开发restful API五--异常处理

    一:任务 1.任务 Spring Boot中默认的错误机制处理机制 自定义异常处理 二:Spring Boot中的默认错误处理机制 1.目前 浏览器访问的时候, restful 接口主要是根据状态码进 ...

  6. day14,函数的使用方法:生成器表达式,生成器函数

    生成器表达式: #列表推导式 # y = [1,2,3,4,5,6,7,8] # x = [1,4,9,16,25,36,49,64] # x = [] # for i in y: # x.appen ...

  7. 电信项目java补充类

    一.DecimalFormat 1.概述 public class DecimalFormat extends NumberFormat DecimalFormat是格式为十进制数的NumberFor ...

  8. python-飞机大战

    效果图 main.py import time import pygame from EnemyPlane import EnemyPlane from HeroPlane import HeroPl ...

  9. POJ2387 Til the Cows Come Home【Kruscal】

    题目链接>>> 题目大意: 谷仓之间有一些路径长度,然后要在这些谷仓之间建立一些互联网,花费的成本与长度成正比,,并且要使这些边连起来看的像一课“树”,然后使成本最大 解题思路: 最 ...

  10. CLR Via第一 章 知识点整理(3)CLR执行程序集的IL代码

    在了解CLR运行之前让我们先简单了解一下IL 除了编译器编译的IL代码,IL也是一种汇编语言,也就是说我们可以直接编写IL代码,当然也有对应的IL编译器,值得一提的是对于面向CLR的其他语言,CLR只 ...