1. 程式人生 > >JAVA 使用原生jdbc批量添加,表被鎖住問題

JAVA 使用原生jdbc批量添加,表被鎖住問題

clas stat 回滾 catch level try type() ive spa

今天用jdbc批量添加數據的時候遇到了一個問題,當數據添加成功過後,再想對該表進行操作發現表被鎖住了,檢查了下代碼發現事務提交了呀!!!!!!!!!!!!

去網上查了大半天的資料才發現問題,在connection commit過後需要加上 connection.setAutoCommit(true);

下面是示例代碼

log.info("插入語句" + sql);
        //獲取結果集
        connection = JdbcUtils.getConnection(database.getMysqlDriverName(), database.getMysqlUrl(), database.getMysqlUserName(), database.getMysqlPassWord());
        
if (connection != null) { //設置為false,事務不會自動提交 connection.setAutoCommit(false); try { ps = connection.prepareStatement(sql); } catch (Exception e) { log.error("--------------------sql語句錯誤----------------------------"); }
try { for (int i = 0; i < tsImAnalysisList.size(); i++) { ps.setString(1, tsImAnalysisList.get(i).getSessionNum()); ps.setObject(2, tsImAnalysisList.get(i).getCreateTime()); ps.setString(3, tsImAnalysisList.get(i).getType()); ps.setString(
4, tsImAnalysisList.get(i).getSponsorDept()); ps.setString(5, tsImAnalysisList.get(i).getFirstLevelDept()); ps.setString(6, tsImAnalysisList.get(i).getTwoLevelDept()); ps.setString(7, tsImAnalysisList.get(i).getThreeLevelDept()); ps.setString(8, tsImAnalysisList.get(i).getSponsorName()); ps.setLong(9, tsImAnalysisList.get(i).getSponsorUserId()); ps.setLong(10, tsImAnalysisList.get(i).getReplyUserId()); ps.setString(11, tsImAnalysisList.get(i).getReplyUserName()); ps.setLong(12, tsImAnalysisList.get(i).getFirstResponseTime()); ps.setLong(13, tsImAnalysisList.get(i).getTotalDuration()); ps.setObject(14, LocalDateTime.now()); ps.addBatch(); } //執行批處理 ps.executeBatch(); //提交 connection.commit(); connection.setAutoCommit(true); ps.clearBatch(); if (ps.executeUpdate() > 0) { return 1; } } catch (Exception e) { //回滾事務 // connection.rollback(); log.error("集合數據賦值異常" + e); } //關閉連接 //關閉連接 JdbcUtils.colseResource(connection, ps, rs);

JAVA 使用原生jdbc批量添加,表被鎖住問題