项目场景: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();
}
}