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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM