今天用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);
