转自 http://mousepc.iteye.com/blog/1131462

业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。

实现批处理有两种方式

第一种方式:
  •Statement.addBatch(sql)
  执行批处理SQL语句
  •executeBatch()方法:执行批处理命令
  •clearBatch()方法:清除批处理命令

 Connection conn = null;

 Statement st = null;

 ResultSet rs = null;

 try {

 conn = JdbcUtil.getConnection();

 String sql1 = "insert into user(name,password,email,birthday)

   values('kkk','123','abc@sina.com','1978-08-08')";

 String sql2 = "update user set password='123456' where id=3";

 st = conn.createStatement();

 st.addBatch(sql1);  //把SQL语句加入到批命令中

 st.addBatch(sql2);  //把SQL语句加入到批命令中

 st.executeBatch();

 } finally{

   JdbcUtil.free(conn, st, rs);

 }
采用Statement.addBatch(sql)方式实现批处理:
  •优点:可以向数据库发送多条不同的SQL语句。
  •缺点:
  •SQL语句没有预编译。
  •当向数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复写上很多条SQL语句。例如:

  Insert into user(name,password) values(‘aa’,’111’);

   Insert into user(name,password) values(‘bb’,’222’);

  Insert into user(name,password) values(‘cc’,’333’);

  Insert into user(name,password) values(‘dd’,’444’);

l实现批处理的第二种方式:
  •PreparedStatement.addBatch()
conn = JdbcUtil.getConnection();

String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";

st = conn.prepareStatement(sql);

for(int i=0;i<50000;i++){

  st.setString(1, "aaa" + i);

  st.setString(2, "123" + i);

  st.setString(3, "aaa" + i + "@sina.com");

  st.setDate(4,new Date(1980, 10, 10));

  st.addBatch();

  if(i%1000==0){//每一千条语句执行一次批处理

    st.executeBatch();

    st.clearBatch();

  }

}

st.executeBatch();//最后还要执行一次,因为总数可能不是1000的整数倍

采用PreparedStatement.addBatch()实现批处理

  •优点:发送的是预编译后的SQL语句,执行效率高。
  •缺点:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据。

JDBC进行批处理的更多相关文章

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

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

  2. 使用JDBC进行批处理

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

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

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

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

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

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

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

  6. JDBC之批处理

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

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

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

  8. JDBC进行批处理Batch

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

  9. (十七)使用JDBC进行批处理

    目录 业务场景: 第一种方式 第二种方式 批处理中的 update() 方法 注意事项 备注: 业务场景: 当需要向数据库中发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的 ...

随机推荐

  1. SQL Server2012关于表内事项出现次数降序排列(存储过程)

    USE [growup] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[S_GetRanking ...

  2. Centos上的安装openoffice+unoconv+swftools (转)

    ############################## #    swftools的安装     # ############################## 1.安装所需的库和组件 yum ...

  3. Python的平凡之路(8)

    (本文是对平凡之路(7)的补充等) 一.动态导入模块 import importlib __import__('import_lib.metaclass') #这是解释器自己内部用的 #importl ...

  4. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

  5. hdu 2073

    ps:感觉纯数学题.....我的思路就是找规律,发现dp(x+y) 就是 (0,x+y)的值,然后再加上x*根号2.就是他的距离.然后两个距离相减的绝对值就是两个点之间的距离了. 代码: #inclu ...

  6. WCF vs ASMX WebService

    This question comes up a lot in conversations I have with developers. “Why would I want to switch to ...

  7. Libgdx 开发指南(1) 应用框架

    应用框架 模块 Libgdx包含五个核心接口与操作系统交互,各自实现了如下接口: Application:运行应用,向client通知应用层事件,例如窗口大小的改变(window resizing). ...

  8. UVA 10407 差分思想的运用

    就是每两项相减,肯定能被模数整除. #include <iostream> #include <cstring> #include <cstdio> #includ ...

  9. 处理oracle的死锁

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...

  10. M6: 使用摄像头(CameraCaptureUI)

    本小节介绍UWP中摄像头的使用,使用CameraCaptureUI来拍照,不仅能够获得图像,还能够对图像进行剪裁 (目前Mobile设备还上不支持). 在本例中, 单击Camera按钮调用摄像头来拍摄 ...