报错一般是由于批量插入时候的list数目多,且单个/总参数超过限制.
常见的解决方案有两种:
-
分批插入:将大批量数据拆分成多个小批量插入,例如每100条或每1000条记录执行一次插入操作;
-
使用存储过程或其他技术来解决:使用存储过程等技术,将数据分割为多个批次插入数据库。
在这里主要推荐方案1
简单说就是把多个list插入多个数目少的list集合
这里介绍list.sublist方法:
list.subList(int fromIndex, int toIndex) 方法
是用来获取 list 中子列表的方法。其中 fromIndex 表示子列表的起始索引(包含),toIndex 表示子列表的结束索引(不包含)。
例如,如果有一个长度为 10 的列表,想要获取它的前三个元素,可以使用 list.subList(0, 3) 方法。返回的子列表包含下标为 0、1 和 2 的元素,不包含下标为 3 的元素。
上完整代码:(拷贝即可用)
if (list != null && !list.isEmpty()) {
// 分批次插入数据,每次插入100条记录
for (int i = 0; i < list.size(); i += 100) {
List<ProductionOrd> subList = list.subList(i, Math.min(i + 100, list.size()));
productionOrdMapper.batchInsert(subList);
}
}
从 list 中获取一个子列表 subList,子列表的起始索引是 i,结束索引是 Math.min(i + 100, list.size())。
具体解释如下:
i是循环变量,表示当前批次插入的起始位置。Math.min(i + 100, list.size())计算出子列表的结束索引。这里使用Math.min()方法是为了防止越界,因为最后一批数据可能不满 100 条,所以取i + 100和list.size()的最小值作为结束索引。- 最终,
subList就是从list中截取的子列表,其中包含了批次插入的数据。
通过每次循环获取不同的子列表,可以将插入的数据分批次处理,以避免一次性插入过多的数据导致数据库参数数量超过限制。
文章介绍了在遇到批量插入时因参数数量限制的常见问题,推荐分批插入方法,利用list.subList方法提取子列表,每次插入100条数据,以避免超限。详细讲解了如何使用子列表实现分批插入数据库的过程。
171万+

被折叠的 条评论
为什么被折叠?



