程序报错:
org.springframework.jdbc.UncategorizedSQLException:
Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
原因:
原因是java后端通过idea编译器向数据库插入或者增加数据时,一次向数据库传入参数超出限制,即 (list的size)乘(一行数据包含的参数)>2100
解决方法:
通过查阅资料(基于我的现有知识储备)个人总结有三种方式:
1、service层for循环分条插入
2、mapper映射文件mybaits的<foreach>标签循环
3、前端设置字段按需少量传入接口
有博主测过一些方法的速率:MyBatis 批量插入数据的 3 种方法!和一些分析 MyBatis批量插入几千条数据为何慎用foreach_java_脚本之家
个人方法:
我个人还是比较喜欢使用service层分片处理数据,具体方法使用的是Lists.partition()集合
@Override public Result<Boolean> saveBxjhData(List<BxjhDTO> list) { //对前端list分条,这里要注意 dto类的数量*分条数(我这里是400)< 2100 Lists.partition(list,400).forEach(data-> bxjhMapper.insertData(data)); return new Result<>(true); }
还有一种方式:
for (int i = 0; i < czList.size(); i += 100) { int length = i + 100; //限制截取数据的总长度 if (length > czList.size()) { length = czList.size(); } //每100条数据 截取一次 List newList = ywthbList.subList(i, length); //执行数据库操作 ywtjbSaveMapper.saveYwtjbData(newList); }
文章讲述了在Java后端开发中,由于参数数量超过SpringJDBC和SQLServer的限制而引发的错误。作者介绍了三种解决策略,包括service层分条插入、MyBatisforeach标签循环和前端按需传参,以及作者个人偏好的Lists.partition分片处理方法。
1万+





