报错信息:

传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为2100

错误分析:

由于mybatis拼接的sql语句参数过多导致

解决办法:

不用mybatis的批处理

①配置文件  applicationContext-mybatis.xml

  <!-- 解决mybatis批处理insert -->
<bean class="org.mybatis.spring.SqlSessionTemplate" id="sqlSession">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
<constructor-arg name="executorType" value="BATCH" />
</bean>

②service层注入

    @Autowired
private SqlSessionTemplate sst;

③自己封装的方法,在service曾,用于批量insert

	public Boolean insert(List<PDA_JWL_INTERFACE_H> inList,String zyh){
// 新获取一个模式为BATCH,自动提交为false的session
// 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = sst.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
moMapper= session.getMapper(MOMapper.class);
Map<String,Object> cc = new HashMap<>(); try {
for (PDA_JWL_INTERFACE_H in : inList) {
moMapper.insert(in);
}
cc.put("zyh", zyh);
moMapper.call(cc);
session.commit();
//清理缓存,防止溢出
session.clearCache();
return true;
} catch (Exception e) {
session.rollback();
return false;
} finally {
session.close();
}
}

④controller中调

	/**
* 提交汇总
*/
@RequestMapping(value="/tj", method = RequestMethod.POST,produces="application/json;charset=utf-8")
@ResponseBody
public Map<String,Object> tj(@RequestBody List<PDA_JWL_INTERFACE_H> tList,HttpServletRequest req){ //封装返回值的map
Map<String,Object> m = new HashMap<>(); //解密认证
String token = req.getParameter("token");
String tk = MD5Utils.encode(CREKEY);
System.out.println(tk);
if(!token.equals(tk)){
m.put("flag",Code.FLAG1.getIndex());
m.put("erroCode", Code.ERROR1.getIndex());
m.put("content", "");
return m;
}
//存放要放到中间表里的数据
List<PDA_JWL_INTERFACE_H> inList = new LinkedList<>(); //作业号,用UUID生产,唯一编号,区分作业类型 //Long t1 = System.currentTimeMillis(); String zyh = UUID.randomUUID().toString();
try {
for (PDA_JWL_INTERFACE_H t : tList) { PDA_JWL_INTERFACE_H in = new PDA_JWL_INTERFACE_H(); //作业号
in.setZYH(zyh);
//制单人号:默认当前登陆的ID(必填,不显示)
in.setZDRH(t.getZDRH());
//事物类型:默认“采购入库”(必填,不显示)
in.setSWLX(t.getSWLX());
//供应商号:必填,不显示
in.setGYSH(t.getGYSH());
//供应商:视图中公司号与本作业公司号相同
in.setGYS(t.getGYS());
//公司号:必填,不显示
in.setGSH(t.getGSH());
//仓库号:必填,不显示
in.setCKH(t.getCKH());
//仓库:视图中操作员号与当前登陆ID相同
in.setCK(t.getCK());
//新仓库号
in.setXCKH(t.getXCKH());
//新仓库
in.setXCK(t.getXCK());
//领用人
in.setLYR(t.getLYR());
//新库位号
in.setXKWH(t.getXKWH());
//新库位
in.setXKW(t.getXKW());
//采购类型:必填
in.setCGLX(t.getCGLX());
//采购人:必填
in.setCGR(t.getCGR());
//库位号:必填,不显示
in.setKWH(t.getKWH());
//库位:视图中仓库号与本作业仓库号相同
in.setKW( t.getKW());
//行号:自动生成本作业中不重复的序号。app端传过来
in.setHH( t.getHH());
//物品号:输入物品号后直接返回对应值,需要完全匹配。视图中公司号、物品类型与本作业公司号、采购类型相同。(必填)
in.setWPH(t.getWPH());
//物品名称:显示、不可编辑
in.setWPMC(t.getWPMC());
//规格:显示、不可编辑
in.setGG(t.getGG());
//单位:显示、不可编辑
in.setDW(t.getDW());
//生产批号:输入关键字后弹窗选择。
in.setSCPH(t.getSCPH());
//等级:默认 一等品(必填)
in.setDJI(t.getDJI());
//数量:必填
in.setSL(t.getSL());
//件数:非必填
in.setJS(t.getJS());
//单价:非必填,如果是空或0,只提示,不控制后续操作。
in.setDJ(t.getDJ());
//金额:单价*数量,不可编辑。
in.setJE(t.getJE());
//币别码:默认 RMB(必填)
in.setBBM(t.getBBM());
//税率:默认 0.17(必填)
in.setSLV(t.getSLV());
//一级部门
in.setYJBM(t.getYJBM());
//盘点来源
in.setPDLY(t.getPDLY());
//批号
in.setPH(t.getPH()); inList.add(in); }
Boolean flag = moService.insert(inList,zyh);
if(!flag){
int i = 1/0;
}else{
/*Long t2 = System.currentTimeMillis();
System.out.println(t2-t1);*/
}
} catch (Exception e) {
e.printStackTrace();
m.put("flag",Code.FLAG1.getIndex());
m.put("erroCode", Code.ERROR2.getIndex());
m.put("content", "");
return m;
}
m.put("flag",Code.FLAG.getIndex());
m.put("erroCode", "");
m.put("content", "");
return m;
}

⑤映射文件中xxxMapper.xml

	<!-- 提交 -->
<insert id="insert" parameterType="PDA_JWL_INTERFACE_H" >
insert into PDA_JWL_INTERFACE_H ( ZYH,ZDRH,SWLX,SWRQ,GYSH,GYS,GSH,CKH,CK,XCKH,
XCK,LYR,XKWH,XKW,CGLX,CGR,KWH,KW,HH,WPH,
WPMC,GG,DW,SCPH,DJI,SL,JS,DJ,JE,BBM,
SLV,YJBM,PDLY,PH ) values (#{ZYH}, #{ZDRH}, #{SWLX},getdate(), #{GYSH},
#{GYS}, #{GSH},#{CKH}, #{CK},#{XCKH},
#{XCK},#{LYR},#{XKWH},#{XKW},#{CGLX},
#{CGR}, #{KWH},#{KW}, #{HH}, #{WPH},
#{WPMC}, #{GG},#{DW}, #{SCPH}, #{DJI},
#{SL}, #{JS},#{DJ}, #{JE}, #{BBM},
#{SLV},#{YJBM},#{PDLY}, #{PH}) </insert>

  

  

  

mybatis批量插入insert时报错的更多相关文章

  1. mybatis批量插入oracle时报错:unique constraint (table name) violated

    mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.

  2. SQL Server 2008 批量插入数据时报错

    前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...

  3. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  4. 【转载】MyBatis批量插入数据(insert)

    介绍:MyBatis批量插入数据,原理就是在xml文件中添加 foreach 语句,然后MyBatis自动在values后面添加多个括号: XML文件如下: <?xml version=&quo ...

  5. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

  6. springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

    案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...

  7. 160421、MyBatis批量插入数据

    在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些 ...

  8. oracle+mybatis批量插入踩坑记

    最近在项目中需要使用oracle+mybatis批量插入数据,因为自增主键,遇到问题,现记录如下: 一.常用的两种sql写法报错 1.insert ... values ... <insert ...

  9. MyBatis 批量插入数据的 3 种方法!

    批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于<MyBatis Plus 批量数据插入功能,yyds!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...

随机推荐

  1. VB-机房收费系统之Excel导出

    敲机房很久了,感觉对代码的感知力终于有所提高了,很是开心.今天在敲学生充值记录查询的时候发现,其中有了新的知识,  这时候就该到了分析问题的时候了.不说废话了! 首先 保证自己的笔记本或者电脑上必须有 ...

  2. 模板【洛谷P3811】 【模板】乘法逆元

    P3811 [模板]乘法逆元 给定n,p求1~n中所有整数在模p意义下的乘法逆元. T两个点的费马小定理求法: code: #include <iostream> #include < ...

  3. Tarjan+LCA【洛谷P2783】 有机化学之神偶尔会做作弊

    [洛谷P2783] 有机化学之神偶尔会做作弊 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. ...

  4. 了解Linux系统

    ++++++++++++++++++++++++++++++++++++++++++++++++++++ 有用的参考链接: 带你初识Linux操作系统:https://www.linuxidc.com ...

  5. C#空接合操作符——??

    操作符: ?? 用法:C = A ?? B; 解释:if(A != null){ C=A;} else{C=B}     类似三元运算符 :? 例子: Int32? num1=null; Int32? ...

  6. 找出区间[A, B]内所有数字的奇数字位出现次数为偶数,偶数字位出现次数为计数的数的个数。(数位DP)

    题目:找出区间[A, B]内所有数字的奇数字位出现次数为偶数,偶数字位出现次数为计数的数的个数. 分析:这道题的状态同样不好取,因为要求每一个奇数的个数都要为偶数,每一个偶数的位数都要为奇数,又因为只 ...

  7. Flowerpot(又是尺取。。)

    题目:http://172.21.85.56/oj/exercise/problem?problem_id=21568 题目大意:老板需要你帮忙浇花.给出N滴水的坐标,y表示水滴的高度,x表示它下落到 ...

  8. kafka的offset和ProcessingGuarantee

    https://blog.csdn.net/xianpanjia4616/article/details/84347087 https://m.2cto.com/net/201703/616024.h ...

  9. 1.Hibernate框架

    1.分层体系结构与持久化 三层体系结构: 分层体系结构: 指的是将系统的组件分隔到不同的层中,每一层中的组件应保持内聚性,并且应大致在同一抽象级           别: 每一层都应与它下面的各层保持 ...

  10. Socket通信客户端和服务端代码

    这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...