JDBC的批量处理语句包括下面两个方法:
addBatch(String):添加需要批量处理的SQL语句或是参数;
executeBatch();执行批量处理语句;

通常我们会遇到两种批量执行SQL语句的情况:

1 多条SQL语句的批量处理;
2 一个SQL语句的批量传参;

针对第一种情况我们以前的做法可能是创建多个Statement,然后挨个execute,或者干脆写个PL/SQL;写过程是个明智的做法,但是我们还可以利用JDBC的批量处理语句进行处理,如下:

 ...
 Statement st  =  conn.createStatement();
 st.addBatch(sql1);
 st.addBatch(sql2);
 ...
 st.addBatch(sqln);
 st.executeBatch();
 ...

我们只创建一次Statement,然后addBatch多条SQL,最后一起执行就可以了,这种用法不多,感觉还不如写个PL/SQL!
但是第二种情况利用JDBC的批量处理语句就比较常见了,这一般用于PreparedStatement,执行同一条语句,只是要传多条参数,多用于批量增、删、改!以前我们习惯使用下面循环的方式进行传参。

 ...
 PreparedStatement pst  =  conn.prepareStatement(sql);
  for ( int  i = 0 ;i < N;i ++ ) ... {
  pst.setInt(1,i);
  ....
  pst.executeQuery();
 }
 ...

如果我们使用了JDBC的批量处理语句,就可以像下面那样处理:

 ...
 PreparedStatement pst  =  conn.prepareStatement(sql);
  for ( int  i = 100 ;i < 1101 ;i ++ ) ... {
  pst.setInt(1,i);
  ...
  pst.addBatch();
 }
 pst.executeBatch();
 ...

前者是每传一次参就要执行一次,而后者只执行一次!我做了一个测试,在批量处理的条数很少的时候二者的效率差别不是很大,但是超过50条,就有了差距,随着条数的增多就越明显!所以当我们遇到批量处理的时候,一定要优先考虑JDBC的批量处理语句。

注意:
1 第一种情况不可以添加查询SQL,因为executeBatch()返回的是int [],如果把返回ResultSet的SQl加入会引起异常;
2 第二种情况可以适用于没有返回参数的存储过程,如果存储过程有返回参数,是不可以使用批量处理的!

JDBC的批量处理语句相关推荐

  1. Java -- JDBC 学习--批量处理

    批量处理JDBC语句提高处理速度 当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 JDBC的批量处理语句 ...

  2. mysql语句批量更新数据库_sql 更新批量数据库语句

    JDBC(六)批量处理sql 批量更新是分组在一起的一批更新,并以"批量"方式发送到数据库,而不是逐个发送更新. 一次发送一批更新到数据库,比一个一个发送更快,等待每个更新完成. ...

  3. mysql jdbc驱动 批量更新_jdbc-批量插入、批量删除、批量更新

    一.JDBC的批量插入 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一,使用P ...

  4. mysql jdbc驱动 批量更新_jdbc批量插入,删除,更新

    批量处理:一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能. 不确定JDBC驱动程序是否支持此功能.应该使用DatabaseMetaData.supportsBatchUpdates( ...

  5. JDBC executeBatch批量插入数据

    JDBC executeBatch批量插入数据 JDBC executeBatch批量插入数据 JDBC executeBatch批量插入数据 con.setAutoCommit(false); 项目 ...

  6. PHP无法执行MySQL语句,解决PHP执行批量MySQL语句的问题

    这篇文章主要为大家详细介绍了解决PHP执行批量MySQL语句的问题,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧! 当有多条mysql语句连起来需要执行 ...

  7. JDBC的批量查询报告内存溢出解决方法

    JDBC的批量查询报告内存溢出解决方法 参考文章: (1)JDBC的批量查询报告内存溢出解决方法 (2)https://www.cnblogs.com/DreamDrive/p/5761227.htm ...

  8. oracle 批量插入语句

    假如有一个表数据结构为 t_user(id,username,password,realname); 使用多条语句批量插入,适用于mysql,sqlserver,oracle insert into ...

  9. 在JDBC中实现SQL语句的模糊查询

    在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...

最新文章

  1. RPC-client异步收发核心细节?
  2. js 数据类型和转化
  3. python编程 语言-Python成为2018年度编程语言,遥遥领先于其他语言
  4. 自旋表达的到底是什么?
  5. 算法导论笔记:06堆排序
  6. java中的类型擦除type erasure
  7. class与case class的区别(转载)
  8. [css] z-index有时不起作用的原因是什么?怎么解决?
  9. AcWing 786. 第k个数
  10. jQuery插件之ajaxFileUpload异步上传
  11. 基于node.js的网上书店系统的设计与实现.rar(项目源码+论文)(开发文档+nodejs配置+安装+运行教学.zip)
  12. PLC 控制三相异步电动机正反转实验
  13. vivo X Fold和OPPO Find N
  14. 前端后端傻傻分不清楚,这里给你答案
  15. Android N开发者预览版(第二版)发布
  16. 如何优雅地测量一只猫的体积,而不使其感到惊恐或受到伤害?
  17. 初识Matlab-简介|软件界面介绍|搜索路径|帮助系统
  18. vue的头像生成神奇
  19. delphi 获取本机IP地址和MAC地址
  20. 用树莓派4B和宜家台灯玩转AR投影黑科技(神卓互联系列)

热门文章

  1. 如何知道当前操作系统是centos的哪个版本和内核版本?
  2. 【VisionMaster】试用版安装说明
  3. JRE和JDK的区别?
  4. oracle 恢复删除的数据 oracle恢复删除的数据
  5. SVG公众号排版『大尺寸背景图重复安卓不显示』解决方法
  6. WPS word 如何取消定义网格线?无法修改行间距如何解决?
  7. matlab中caitu_tiqu,Matlab平台基于颜色的车牌识别程序
  8. uc神马推广一年多少钱,uc信息流推广一个月要多少钱
  9. 机器学习、深度学习面试知识点汇总
  10. ABBYY FineReader 14之如何选择正确的OCR选项