前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java批处理

Java批处理

作者头像
汤高
发布2018-01-11 17:27:41
1.6K0
发布2018-01-11 17:27:41
举报
文章被收录于专栏:积累沉淀

批处理 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 {

代码语言:javascript
复制
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();
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档