zoukankan      html  css  js  c++  java
  • 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();
                    }
                }
  • 相关阅读:
    QT事件(信号与槽)用法
    Debian自启动服务
    云锵投资 2020 年 09 月简报
    大数据表查询优化
    云锵投资 2020 年 08 月简报
    can't open ttyS0, error code 2
    QHostAddress 获取ip地址后 格式为"::ffff:127.0.0.1"问题
    qmake: could not exec '/home/hbg/Qt5.11.1/5.11.1/gcc_64/bin/qmake': No such file or directory
    connect to database error : Access denied for user 'root'@'localhost'
    ping 打印添加时间戳
  • 原文地址:https://www.cnblogs.com/Ericzya/p/8033403.html
Copyright © 2011-2022 走看看