MySQL批量更新操作

 public void reviseOrderAmount(NamedParameterJdbcTemplate namedJdbcTemplate, ReportTradingKu tradingKu) {
        //查询语句
        String selectSql = "select t1.merchant_bn,t1.order_id, t1.total_amount,t1.final_amount,t1.cost_item,t1.source_name from sdb_b2c_orders as t1 where  t1.total_amount != t1.cost_item and t1.total_amount = '0.000'";
        //查询数据
        List<ReviseOrderAmount> list = namedJdbcTemplate.query(selectSql, new BeanPropertyRowMapper<>(ReviseOrderAmount.class));
        Connection connection = null;
        PreparedStatement pstm = null;
        try {
            StringBuffer sbf = getJdbcUrl(tradingKu);
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection(sbf.toString(), tradingKu.getUserName(), tradingKu.getUserPassword());
            connection.setAutoCommit(false);
            String updateSql = "update sdb_b2c_orders set total_amount = ?,final_amount = ? where order_id = ?";
            pstm = connection.prepareStatement(updateSql);
            if(list != null && list.size() >0){
                for (int i = 0; i < list.size(); i++) {
                    ReviseOrderAmount reviseOrderAmount = list.get(i);
                    pstm.setString(1,reviseOrderAmount.getCost_item());
                    pstm.setString(2,reviseOrderAmount.getCost_item());
                    pstm.setString(3,reviseOrderAmount.getOrder_id());
                    //添加批量处理sql
                    pstm.addBatch();
                    //每200条执行一次,避免内存不够
                    if(i > 0 && i % 200 == 0){
                        pstm.executeBatch();
                    }
                }
                //最后执行剩余不足200条的
                pstm.executeBatch();
                connection.commit();
                logger.info("------------更新【"+tradingKu.getMerKuName()+"】总计【"+list.size()+"】条数据------------");
            }else{
                logger.info("无数据可操作");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            closeConnect(connection);
            closePstm(pstm);
        }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值