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

一、使用Statement完成批处理

  1、使用Statement对象添加要批量执行SQL语句,如下:

1 Statement.addBatch(sql1);
2 Statement.addBatch(sql2);
3 Statement.addBatch(sql3);

  2、执行批处理SQL语句:Statement.executeBatch();
  3、清除批处理命令:Statement.clearBatch();

1.1、使用Statement完成批处理范例

  1、编写测试的SQL脚本创建表

1  create table testbatch
2 (
3      id int primary key,
4      name varchar(20)
5 );

  2、编写测试代码,如下所示:

 1 package me.gacl.demo;2 3 import java.sql.Connection;4 import java.sql.ResultSet;5 import java.sql.Statement;6 import me.gacl.utils.JdbcUtils;7 import org.junit.Test;8 9 /**
10 * @ClassName: JdbcBatchHandleByStatement
11 * @Description: 使用Statement实现JDBC批处理操作
12 * @author: 孤傲苍狼
13 * @date: 2014-9-20 下午10:05:45
14 *
15 */
16 public class JdbcBatchHandleByStatement {
17
18     @Test
19     public void testJdbcBatchHandleByStatement(){
20         Connection conn = null;
21         Statement st = null;
22         ResultSet rs = null;
23         try{
24             conn = JdbcUtils.getConnection();
25             String sql1 = "insert into testbatch(id,name) values(1,'aaa')";
26             String sql2 = "insert into testbatch(id,name) values(2,'bbb')";
27             String sql3 = "insert into testbatch(id,name) values(3,'CCC')";
28             String sql4 = "insert into testbatch(id,name) values(4,'DDD')";
29             String sql5 = "update testbatch set name='gacl' where id=1";
30             String sql6 = "insert into testbatch(id,name) values(5,'FFF')";
31             String sql7 = "delete from testbatch where id=2";
32             st = conn.createStatement();
33             //添加要批量执行的SQL
34             st.addBatch(sql1);
35             st.addBatch(sql2);
36             st.addBatch(sql3);
37             st.addBatch(sql4);
38             st.addBatch(sql5);
39             st.addBatch(sql6);
40             st.addBatch(sql7);
41             //执行批处理SQL语句
42             st.executeBatch();
43             //清除批处理命令
44             st.clearBatch();
45         }catch (Exception e) {
46             e.printStackTrace();
47         }finally{
48             JdbcUtils.release(conn, st, rs);
49         }
50     }
51 }

1.2、采用Statement.addBatch(sql)方式实现批处理的优缺点

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

1 Insert into user(name,password) values('aa','111');
2 Insert into user(name,password) values('bb','222');
3 Insert into user(name,password) values('cc','333');
4 Insert into user(name,password) values('dd','444');

二、使用PreparedStatement完成批处理

2.1、使用PreparedStatement完成批处理范例

  测试代码如下:

 1 package me.gacl.demo;2 3 import java.sql.Connection;4 import java.sql.PreparedStatement;5 import java.sql.ResultSet;6 import me.gacl.utils.JdbcUtils;7 import org.junit.Test;8 9 /**
10 * @ClassName: JdbcBatchHandleByStatement
11 * @Description: 使用prepareStatement实现JDBC批处理操作
12 * @author: 孤傲苍狼
13 * @date: 2014-9-20 下午10:05:45
14 *
15 */
16 public class JdbcBatchHandleByPrepareStatement {
17
18     @Test
19     public void testJdbcBatchHandleByPrepareStatement(){
20         long starttime = System.currentTimeMillis();
21         Connection conn = null;
22         PreparedStatement st = null;
23         ResultSet rs = null;
24
25         try{
26             conn = JdbcUtils.getConnection();
27             String sql = "insert into testbatch(id,name) values(?,?)";
28             st = conn.prepareStatement(sql);
29             for(int i=1;i<1000008;i++){  //i=1000  2000
30                 st.setInt(1, i);
31                 st.setString(2, "aa" + i);
32                 st.addBatch();
33                 if(i%1000==0){
34                     st.executeBatch();
35                     st.clearBatch();
36                 }
37             }
38             st.executeBatch();
39         }catch (Exception e) {
40             e.printStackTrace();
41         }finally{
42             JdbcUtils.release(conn, st, rs);
43         }
44         long endtime = System.currentTimeMillis();
45         System.out.println("程序花费时间:" + (endtime-starttime)/1000 + "秒!!");
46     }
47 }

2.2、采用PreparedStatement.addBatch()方式实现批处理的优缺点

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

  关于JDBC批处理的内容就总结这么多。

转载于:https://www.cnblogs.com/estellez/p/5680480.html

javaweb基础(36)_jdbc进行批处理相关推荐

  1. javaweb基础(35)_jdbc处理oracl大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  2. javaweb基础(40)_jdbc框架

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

  3. JavaWeb基础核心技术-佟刚-专题视频课程

    JavaWeb基础核心技术-132383人已学习 课程介绍         本Java视频教程涵盖JavaWEB 企业级开发所需的Servlet.JSP.MVC 设计模式.EL 表达式.JavaBea ...

  4. JavaWeb基础知识总结

     [Java面试题]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l ...

  5. [Java面试三]JavaWeb基础知识总结.

    [Java面试三]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Int ...

  6. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  7. index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发

    JavaWeb基础与应用 2.Servlet开发 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源 ...

  8. javaweb基础知识点记录2

    javaweb基础知识点记录 1.在service方法中,首先获得请求的方法名,然后根据方法名调用对应的doXXXX方法,比如说请求参数为GET,那么就会去调用doGet方法,请求参数为POST,那么 ...

  9. javaweb基础知识点记录1

    javaweb基础知识点记录 1.当我们通过在浏览器的输入栏中直接输入网址的方式访问网页的时候,浏览器采用的就是GET方法向服务器获取资源. 2.我们可以将Servlet看做是嵌套了HTML代码的ja ...

最新文章

  1. (实用)将wordpad添加到Windows PowerShell中
  2. 用户登录验证(新增帐号错误重试)
  3. PyTorch Tutorial
  4. Java JVM 汇编代码入门 GitChat链接
  5. ReactNative简介、开发环境、调试、常用组件、useState状态、FlatList组件、SectionList组件、Platform 模块、定义样式、图片组件、触摸事件、打包apk发布版
  6. LQR轨迹跟踪算法Python/Matlab算法实现2
  7. 23种设计模式类图总结
  8. jar 包的认识与处理、jar 文件 war 文件以及 ear 文件
  9. Node.js+windows
  10. 【GIS导论】实验一 桌面GIS的功能与菜单操作
  11. 468.验证IP地址
  12. 最新elasticsearch版本与jdk版本对应图
  13. ecshop手机号码归属地
  14. Spring容器是什么?为什么要使用Spring容器?
  15. Vue给每个v-for的元素设置不同的点击事件
  16. 最帅爬虫_豆瓣读书(加密数据获取)
  17. 一款基于springboot开发的经典后台管理系统
  18. 【JokerのZYNQ7020】QSPI启动。
  19. Gulp插件之gulp-babel和gulp-uglify关于js代码的转换和压缩
  20. mysql命令大全(订正版)

热门文章

  1. layui框架和vue哪个好_小颖的前端框架
  2. Hadoop架构中各个集群在开发中的作用
  3. AlloyTeam|腾讯全端 AlloyTeam 团队 - HTML5开源图像处理框架AlloyImage
  4. [译]深入 NGINX: 为性能和扩展所做之设计
  5. oracle—新建用户
  6. python 返回函数
  7. 向着DJANGO奔跑!
  8. tomcat-maven-plugin 2.0版本发布
  9. JavaScript书籍的免费32本-收集分享
  10. wpbakery Visual Composer - web网页可视化 编辑器 介紹