JDBC之批处理

  现在有这么一个需求,要求把2000条记录插入表中,如果使用java代码来操作,我们可以使用Statement或者PreparedStatement来实现,通过循环来把SQL语句一条又一条地发送给数据库处理。我们知道,数据库处理SQL速度是非常快的,如果传输速度慢,跟不上处理速度,那么数据库就会出现等待现象。为了解决这个办法,我们可以一次发送多个SQL语句给数据库处理,这样就能增加效率,这时候我们就要用到批处理技术。

  然而,批处理也可以通过Statement和Preparement来实现,要用到的主要方法如下:

 Statement批处理操作:

    void addBatch(String sql)  --把SQL语句加到批处理缓冲区中

    int[] executeBatch()    --执行SQL缓冲区中的所有语句

    void clearBatch()      --清空缓存区中的所有SQL语句

 PreparedStatement操作:

    void addBatch(String sql)  --把一组参数加到参数缓冲区中

    int[] executeBatch()    --执行SQL缓冲区中的所有参数组

    void clearBatch()      --清空缓存区中的所有参数组

下面就演示一下这些方法的用法吧~

利用Statement

    @Test
public void batchTest() throws Exception{
//调用工具类获取连接
connection = sqlUtil.getconnection(); //生成Statemnt对象
Statement statement = connection.createStatement(); //把若干条SQL语句放到缓冲区中
for(int i=1;i<=200;i++){
//准备sql语句
String sql = "insert into worker(wid,wname) values("+i+",'张三"+i+"')";
//添加到缓冲区
statement.addBatch(sql); if(i%20==0){
System.out.println("共"+ i +"条语句插入了表中");
//缓存区有20条指令时执行
statement.executeBatch();
//执行完清空缓存区
statement.clearBatch();
}
}
//关闭连接
sqlUtil.close(statement, connection);
}

利用PreparedStatement

    public void batchTest2() throws Exception{
//调用工具类获取连接
connection = sqlUtil.getconnection(); //生成Statemnt对象
PreparedStatement prepS = connection.prepareStatement("insert into worker(wid,wname) values(?,?)"); //把若干条SQL语句放到缓冲区中
for(int i=1;i<=200;i++){
//设置参数
prepS.setObject(1, i);
String wname = "李四"+i;
prepS.setObject(2, wname); //添加到缓冲区
prepS.addBatch(); if(i%20==0){
System.out.println("共"+ i +"条语句插入了表中");
//缓存区有20条指令时执行
prepS.executeBatch();
//执行完清空缓存区
prepS.clearBatch();
}
}
//关闭连接
sqlUtil.close(prepS, connection);
}

以上就是利用JDBC实现批处理了~

如果想要执行效率最快,我们应该使用 prepareStatemnt + 批处理  这样的方式来执行多条SQL语句。

JDBC之批处理的更多相关文章

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

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

  2. JDBC进行批处理

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

  3. 使用JDBC进行批处理

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

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

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

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

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

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

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

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

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

  8. JDBC进行批处理Batch

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

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

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

随机推荐

  1. bzoj千题计划174:bzoj1800: [Ahoi2009]fly 飞行棋

    http://www.lydsy.com/JudgeOnline/problem.php?id=1800 圆上两条直径构成矩形的对角线 #include<cstdio> using nam ...

  2. linux课程总结

    linux课程总结 --20125111 李冰清 转眼间,为期十六周的linux课程已进入尾声,回想起这十六周的课程,不断浮现在脑海里的是娄老师的笑容以及这十六周以来的点点滴滴. 第一次听到娄老师说将 ...

  3. javascript数组赋值操作

    最近在司徒正美的<javascript框架设计>,在里面发现了一个段代码 ...... var _len = arr1.length; while (_len) { arr2[--_len ...

  4. Manacher's Algorithm 马拉车算法

    作用:求一个字符串中的最长子串,同时还可以求所有子串的长度. 题目链接: https://vjudge.net/contest/254692#problem/B 代码: #include<bit ...

  5. How to become a successful bug bounty hunter

    出处:https://www.hackerone.com/blog/become-a-successful-bug-bounty-hunter 如果你梦想成为赏金猎人,你的梦想就会成真 - 不要把你的 ...

  6. 【windows核心编程】HideProcess

    A Basic Windows DKOM Rootkit Pt 1 https://www.landhb.me/posts/v9eRa/a-basic-windows-dkom-rootkit-pt- ...

  7. 【转】SpringMVC Controller 介绍

    转自:原文url 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  8. 让linux中 history显示每条命令的操作时间及操作用户【转】

    一.history 中显示日期时间用户名的办法 history 命令,用来显示命令行上的操作记录 不过默认是仅显示操作命令行本身,而没有记录操作时间等细节 例如 这样,我们查找记录时很麻烦,想回顾下某 ...

  9. [转]使用 mitmproxy + python 做拦截代理

    使用 mitmproxy + python 做拦截代理   本文是一个较为完整的 mitmproxy 教程,侧重于介绍如何开发拦截脚本,帮助读者能够快速得到一个自定义的代理工具. 本文假设读者有基本的 ...

  10. java Socket和ServerSocket多线程编程

    这是在一本java教材上看到的,做了点修改.具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到. 程序分两部分,服务端和客户端.先把服务端运行起来,在运行客户端.整个过程就是 ...