jdbc實現批量提交rollback


最近上了一個老項目,要修改一些業務,具體的思路是在jsp中實現對數據的某些批量操作,因此做一下筆記。

1.整體jdbc建立連接/關閉連接

            conn = DbUtil.getConnection();
            statement = conn.createStatement();
            resultSet = null;
            //保存當前提交狀態
            boolean autoCommit = conn.getAutoCommit();
            //關閉自動提交
            conn.setAutoCommit(false);
            String updateMANUALSql = "*****";
            statement.addBatch(updateMANUALSql);
            try {
                statement.executeBatch();
                conn.commit();
            } catch (Exception e) {
                e.printStackTrace();
                conn.rollback();
            } finally {
                //重置
                conn.setAutoCommit(autoCommit);
                //清除批處理命令
                statement.clearBatch();
            }
            //關閉resultSet
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                resultSet = null;
            }
            //關閉statement
            statement.clearBatch();
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                statement = null;
            }
            //關閉數據庫連接
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
                conn = null;
            }

2.批量插入更改刪除數據優化

    String sql = "insert into arp_standard(guid, devicebrand, devicename, deviceip, ipaddress, " +
                     "macaddress, createtime) values(?,?,?,?,?,?,?)";
        try{
            conn = DBConnection.getConnection();
            ps = conn.prepareStatement(sql);
             
    //保存當前提交狀態
    boolean autoCommit = conn.getAutoCommit();
    //關閉自動提交
    conn.setAutoCommit(false);
             
            int len = list.size();
            for(int i=0; i<len; i++) {
                ps.setString(1, list.get(i).getGuid());
                ps.setString(2, list.get(i).getDeviceBrand());
                ps.setString(3, list.get(i).getDeviceName());
                ps.setString(4, list.get(i).getDeviceIp());
                ps.setString(5, list.get(i).getIpAddress());
                ps.setString(6, list.get(i).getMacAddress());
                ps.setString(7, list.get(i).getCreateTime());
                 
                 
                //插入代碼打包,等一定量后再插入
                ps.addBatch(); 
                //每200次提交一次 
                if((i!=0 && i%200==0) || i==len-1){//可以設置不同的大小;如50,100,200,500,1000等等  
                    ps.executeBatch();  
                    //提交,批量插入數據庫中。
                    conn.commit();  
                    ps.clearBatch();
                }
            }

 


免責聲明!

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



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