mybatis批量插入超过500多条就报错

在使用MyBatis开发数据导入功能时遇到错误:当尝试导入约2000条数据,尤其是在达到500条左右时,抛出`ORA-01438`错误,提示数值超过了列的精度限制。起初怀疑是字段长度问题,但因所有数字字段为int类型,故排除该原因。通过逐步减少数据量,发现超过500条即开始报错。解决方案是采用分批次插入的方式,每次处理500条数据,避免一次性大量数据操作导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:mybatis开发数据导入功能时,导入数据大概2000多条


问题描述

例如:在大概500多条的时候插入就报

java.sql.SQLDataException: ORA-01438: 值大于为此列指定的允许精度
ORA-06512: 在 line 1

; SQL []; ORA-01438: 值大于为此列指定的允许精度
ORA-06512: 在 line 1
; nested exception is java.sql.SQLDataException: ORA-01438: 值大于为此列指定的允许精度


原因分析:

开始猜测是字段长度问题导致,但是表中数字类型的都是int类型,不存在这个问题,后来开始试着减少数据量导入,发现超过500之后开始报错


解决方案:

实现分批次执行插入sql

 /  /一次插入的条数,也就是分批的list大小
        int dataLimit = 500;
        int listSize = dealData.size();
        int maxSize = listSize - 1;
        List<CommodityInfo> newList = new ArrayList<CommodityInfo>();//新建一个载体list
        for (int i = 0; i < listSize; i++) {
            //分批次处理
            newList.add(dealData.get(i));//循环将数据填入载体list
            if (dataLimit == newList.size() || i == maxSize) {  //载体list达到要求,进行批量操作
            	xxx.save(newList);
            	newList.clear();
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值