Java 批量往数据库插入数据,提示服务器最多接收多少参数

问题场景

批量往数据库插入数据时,提示服务器接收参数过多,服务器最多接收2100参数。
此时用2100除以实体中的字段数量,可以得出每次commit的个数。

  1. 不大于这个阈值的时候,可以直接通过mapper.xml批量插入;
  2. 大于这个阈值的时候,可以分批次批量插入数据。

Java代码

int resultInt = 0;
int batchCount = 90; // 每批commit的个数
int batchLastIndex = batchCount;// 每批最后一个的下标
for (int index = 0; index < list.size(); ) {
	if (batchLastIndex >= list.size()) {
		batchLastIndex = list.size();
		resultInt = resultInt * userDao.insertByList(list.subList(index, batchLastIndex));
		break;// 数据插入完毕,退出循环
	} else {
		resultInt = resultInt * userDao.insertByList(list.subList(index, batchLastIndex));
		index = batchLastIndex;// 设置下一批下标
		batchLastIndex = index + (batchCount - 1);
	}
}

mapper.xml 代码

<insert id="insertByList">
	insert into user
		(Id, Code, TimePoint, MaxValue, MonValue)
	values
	<foreach collection="list" item="item" index="index" separator=",">
		(#{item.id}, #{item.Code}, #{item.timePoint}, #{item.maxValue}, #{item.monValue})
	</foreach>
</insert>

原文借鉴:关于MyBatis批量插入SqlServer报:RPC 请求中提供了过多的参数。最多应为 2100。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值