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 条评论
登录 后参与评论

相关文章

  • Java中十六进制转换 Integer.toHexString()

    为了显示一个byte型的单字节十六进制(两位十六进制表示)的编码,请使用: Integer.toHexString((byteVar &0x000000FF...

    汤高
  • Java使用JDBC连接Hive(新版本)API封装

    网上找了很多封装的API,发现都是过时了的,运行报各种错误,经过了几天的调错,终于可以使用java代码操作hive了 首先看看所需的包 ? 所有的分析都在代码里...

    汤高
  • hadoop与hbase伪分布式的基本配制文件设置

    Hadoop 0.hbase-env.sh export JAVA_HOME=/software/jdk1.7.0_80 1.core-site.xml ...

    汤高
  • sql格式化工具

    该工具支持oracle、mysql、sql server等关系型数据库,能让你看到sql美化后的清晰的结构,可运用于对复杂SQL语句的分析或者是程序代码优化上,...

    ixiaoyang8
  • Mysql学习笔记(三) - Sql中的安全问题

    很多时候开发人员只关系系统的功能的实现,很多系统开发人员甚至sql的安全全然不知,那么在开发中的sql具体有哪些注意点?这里我们就跟随笔者一起看看sql注入和相...

    程序员_备忘录
  • python实现一次性封装多条sql语句(begin end)

    因为业务需求,优化模型运行时间。考虑到sql语句每一次执行都要建立连接,查询,获取数据耗时过多。就想到将sql一起提交上去运行,能够节省很多时间。原本1.6-2...

    砸漏
  • Python sql注入 过滤字符串的非法字符实例

    以上这篇Python sql注入 过滤字符串的非法字符实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

    砸漏
  • 从python读取sql的实例方法

    以上就是从python读取sql的实例方法的详细内容,更多关于如何从python读取sql的资料请关注ZaLou.Cn其它相关文章!

    砸漏
  • Oracle AWR 阙值影响历史执行计划

          最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值...

    Leshami
  • pl sql 查看历史执行过的sql记录

    现在越来越多人用plsql 查询和执行sql,因为该工具很方便,不仅可以执行sql、以及命令窗口,但是呢,有时候我们执行完sql,可能忘记保存或者当时觉得可能不...

    小小鱼儿小小林

扫码关注云+社区

领取腾讯云代金券