Oracle批量提交

來源:互聯網
上載者:User

標籤:

今天在項目中碰到一個問題,就是需要批量提交10000條語句,

剛開始使用的是statement.addBatch(),結果提交的時候發現需要26秒;

檢查半天,發現批量提交的時候也要關掉自動認可(重要),不然極其影響效能。

改了一下程式,最終代碼如下,執行時間為1秒鐘:

 1 // 擷取一個串連 2             Connection conn = null; 3             PreparedStatement pstm = null; 4             try { 5                 conn = DBConnectionManager.getInstance().getConnection( 6                         ConfigDef.DS_UPDATE_KEY); 7                  conn.setAutoCommit(false);    8 //                statement = conn.createStatement(); 9                 Map<String, String> resultMap = collectResult.get(0);10                 //擷取第一個11                 StringBuilder keyParams = new StringBuilder();12                 StringBuilder valueParams = new StringBuilder();13                 for (Map.Entry<String, String> entry : resultMap.entrySet()) {14                     keyParams.append(", ").append(entry.getKey());15                     valueParams.append(", ? ");16                 }17                 String sqlTemplate = MessageFormat.format(SqlConstant.INSERT_SQL_TEMPLATE, new Object[]{"TB_BMP_SXAUDIT_DATA_TEMP",keyParams,valueParams});18                 logger.info("sqlTemplate:"+ sqlTemplate);19                 pstm = conn.prepareStatement(sqlTemplate);   20 21                 int len = collectResult.size();22                 String uid =  auditObject.getAuditObjectId()+"_"+ taskSeq;23                 for (int i = 0; i < len; i++) {24                     25                     // 對於每一個結果,都要產生往暫存資料表插入一條SQL語句26                     resultMap = collectResult.get(i);27                     //第一個參數是UID28                     pstm.setString(1, uid);29                     // 第2個參數是TASK_ID30                     pstm.setInt(2, taskInfo.getPlanId());31                     // 第3個參數是BATCH_NO32                     Date batchNO = new Date(format.parse(receiveTask.getTaskStartTime()).getTime());33                     System.out.println(batchNO);34                     pstm.setDate(3, batchNO);35                     //第4個參數是CollectID36                     pstm.setLong(4,Long.valueOf(auditObject.getAuditObjectId()));37                     // 第5個參數是TARGET_DB38                     pstm.setString(5, auditObject.getTargetDb());39                     // 第8個參數是AUDIT_TIMES40                     pstm.setInt(6,1);41                     int idx = 7;42                     for (Map.Entry<String, String> entry : resultMap.entrySet()) {43                         pstm.setString(idx++, entry.getValue());44                     }45                     pstm.addBatch();46                 }47                 logger.info("開始執行批量提交");48                 pstm.executeBatch();49                 conn.commit();50                 //等待任務執行成功,調用稽核存過51                 logger.info("開始調用存過");

 

Oracle批量提交

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.