Java批处理

批处理 JDBC对批处理的操作,首先简单说一下JDBC操作sql语句的简单机制。 JDBC执行数据库操作语句,首先需要将sql语句打包成为网络字节流,传递给数据库,数据库经过解包,然后编译sql语句,最后执行,然后将结果通过字节流的形式返回给JDBC API,简单的来说大致分为以下几点: Ø JDBC打包sql语句; Ø 发送字节流至数据库; Ø 数据库解包; Ø 检查sql语法,编译sql; Ø 执行sql语句; Ø 将sql语句返回给JDBC 接口;

如果我们需要插入成千上万甚至更多的数据库,如果采用传统的方式,势必每次都需要经历上述几个步骤,其中执行多少次sql语句就需要进行多少次通讯,网络数据通讯的开销也是一个很耗时的操作步骤,怎样才能减少网络的操作次数呢?我们可否将所有的需要执行的sql语句一次性传递给数据库,然后再将结果返回回来呢,这样不就减少了网络层的开销么?基于这样的原因JDBC API 提供了一个批处理的机制,方便我们的操作. 举例说明:

public class Test4 { public static void main(String[] args) throws SQLException { DBHelper db=new DBHelper(); long starttime=System.currentTimeMillis(); String sql=”“; for( int i=2;i<1000;i++){ sql=”insert into tuser values( ?,’a’)”; List params=new ArrayList(); params.add( i +”“); db.doUpdate(sql, params); } long endtime=System.currentTimeMillis(); System.out.println( endtime-starttime ); } }

结果:非常耗时间 ,而且语句过多会导致程序崩溃 下面看看使用了批处理的例子: public class Test5 {

public static void main(String[] args) throws SQLException {
    DBHelper db=new DBHelper();
    Connection con=db.getCon();
     String sql="insert into tuser values( ?,?)";
     PreparedStatement pstmt=con.prepareStatement(sql); 
     for(  int i=1;i<100000;i++){
         pstmt.setString( 1,i+"");
         pstmt.setString(2, "a"+i);
         pstmt.addBatch();//添加一次预定义参数
         if(   i%1000==0){
             int [] r=pstmt.executeBatch();   //批量执行预定义SQL  这个返回值里面存的是每条语句执行的结果. 
         }
     }
    pstmt.close();
    con.close();
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发技术

shiro源码篇 - shiro的session的查询、刷新、过期与删除,你值得拥有

    老公酷爱网络游戏,老婆无奈,只得告诫他:你玩就玩了,但是千万不可以在游戏里找老婆,不然,哼哼。。。     老公嘴角露出了微笑:放心吧亲爱的,我绝对不会...

2432
来自专栏农夫安全

代码审计之命名执行漏洞

环境:windows + apache + mysql + php (phpstudy) 由于是在Windows下进行的测试,所以和Linux下的测试会有所不...

2936
来自专栏阿杜的世界

《七周七并发模型》阅读笔记(一)一、线程与锁——第一天二、线程与锁——第二天三、线程与锁——第三天

线程与锁模型其实是对底层硬件运行过程的形式化,这种形式化既是该模型最大的优点,也是它最大的缺点。我们借助Java语言来学习线程与锁模型,不过内容也适用于其他语言...

1222
来自专栏农夫安全

代码审计之命令执行漏洞

环境:windows + apache + mysql + php (phpstudy) 由于是在Windows下进行的测试,所以和Linux下的测试会有所不...

2746
来自专栏积累沉淀

Java面试笔试题大汇总(最全+详细答案)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题...

6K11
来自专栏.NET后端开发

ADO.NET入门教程(四) 品味Connection对象

摘要 前几篇文章,我都没有详细讲解Data Provider核心对象,因为我希望在讲解这些对象之前,让大家对一些基础的概念有很好的认识。在上一篇文章《你必须知道...

3816
来自专栏大史住在大前端

webpack4.0各个击破(5)—— Module篇

使用webpack对脚本进行合并是非常方便的,因为webpack实现了对各种不同模块规范的兼容处理,对前端开发者来说,理解这种实现方式比学习如何配置webpac...

1212
来自专栏何俊林

阿里、华为、腾讯Java技术面试题精选

1555
来自专栏君赏技术博客

建议大型项目用上Try Catch建议大型项目用上Try Catch

我们在平时项目做功能的时候,经常会遇到崩溃的情况。如果是我们在开发测试阶段,我们可以找到原因修复。但是遇到已经上线,出现这种问题。要么使用JSPatch进行热修...

761
来自专栏运维一切

ceph对象存储折腾记 原

###前言 一直想弄对象存储,以前弄过一次,不是很理解region是个什么东西,后来时间和工作上的原因没有再折腾,这两天闲了下来,再次折腾了一次。我是参考的ce...

1471

扫码关注云+社区