当前位置:  数据库>oracle

Oracle批量提交

    来源: 互联网  发布时间:2017-06-24

    本文导语: 今天在项目中碰到一个问题,就是Oracle需要批量提交10000条语句,刚开始使用的是statement.addBatch(),结果提交的时候发现需要26秒;检查半天,发现批量提交的时候也要关掉自动提交(重要),不然极其影响性能。 改了一下程序,最终...

今天在项目中碰到一个问题,就是Oracle需要批量提交10000条语句,刚开始使用的是statement.addBatch(),结果提交的时候发现需要26秒;检查半天,发现批量提交的时候也要关掉自动提交(重要),不然极其影响性能。

改了一下程序,最终代码如下,执行时间为1秒钟:

// 获取一个连接
            Connection conn = null;
            PreparedStatement pstm = null;
            try {
                conn = DBConnectionManager.getInstance().getConnection(
                        ConfigDef.DS_UPDATE_KEY);
                conn.setAutoCommit(false); 
//                statement = conn.createStatement();
                Map resultMap = collectResult.get(0);
                //获取第一个
                StringBuilder keyParams = new StringBuilder();
                StringBuilder valueParams = new StringBuilder();
                for (Map.Entry entry : resultMap.entrySet()) {
                    keyParams.append(", ").append(entry.getKey());
                    valueParams.append(", ? ");
                }
                String sqlTemplate = MessageFormat.format(SqlConstant.INSERT_SQL_TEMPLATE, new Object[]{"TB_BMP_SXAUDIT_DATA_TEMP",keyParams,valueParams});
                logger.info("sqlTemplate:"+ sqlTemplate);
                pstm = conn.prepareStatement(sqlTemplate); 

                int len = collectResult.size();
                String uid =  auditObject.getAuditObjectId()+"_"+ taskSeq;
                for (int i = 0; i < len; i++) {
                   
                    // 对于每一个结果,都要生成往临时表插入一条SQL语句
                    resultMap = collectResult.get(i);
                    //第一个参数是UID
                    pstm.setString(1, uid);
                    // 第2个参数是TASK_ID
                    pstm.setInt(2, taskInfo.getPlanId());
                    // 第3个参数是BATCH_NO
                    Date batchNO = new Date(format.parse(receiveTask.getTaskStartTime()).getTime());
                    System.out.println(batchNO);
                    pstm.setDate(3, batchNO);
                    //第4个参数是CollectID
                    pstm.setLong(4,Long.valueOf(auditObject.getAuditObjectId()));
                    // 第5个参数是TARGET_DB
                    pstm.setString(5, auditObject.getTargetDb());
                    // 第8个参数是AUDIT_TIMES
                    pstm.setInt(6,1);
                    int idx = 7;
                    for (Map.Entry entry : resultMap.entrySet()) {
                        pstm.setString(idx++, entry.getValue());
                    }
                    pstm.addBatch();
                }
                logger.info("开始执行批量提交");
                pstm.executeBatch();
                conn.commit();
                //等待任务执行成功,调用稽核存过
                logger.info("开始调用存过");


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3