报错信息:

传入的表格格式数据流(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. AngularJS(二)——常见指令以及下拉框实现

    前言 学完AngularJS,总体上感觉没什么新鲜的东西,但是又感觉每一步都很新鲜,因为没有见过,又因为学到的语法函数和JavaScript差不多,本篇主要介绍一些AngularJS的指令,常见指令和 ...

  2. 【bzoj3172】: [Tjoi2013]单词 字符串-AC自动机

    [bzoj3172]: [Tjoi2013]单词 先用所有单词构造一个AC自动机 题目要求的是每个单词在这个AC自动机里匹配到的次数 每次insert一个单词的时候把路径上的cnt++ 那么点p-&g ...

  3. 洛谷P4137 Rmq Problem / mex(莫队)

    题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入输出格式 输入格式: 第一行n,m. 第二行为n个数. 从第三行开始,每行一个询问l, ...

  4. 开窗函数Over用法

    比如我们有这个表: 销售记录表 日期 姓名 产品 销售额 201601 A 电脑 12560 201601 A 手机 6501 201601 A 平板 8510 201602 A 手机 1560 20 ...

  5. Gson的fromJson()方法

    Gson提供了fromJson()方法来实现从Json相关对象到Java实体的方法. 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构. 先来看第一种: 比如jso ...

  6. Go语言基础之10--面向对象编程2之方法

    一.方法的定义 之前我们学习了结构体(struct),其仅仅是对数据的封装,并没有行为方法,还不是一个完全的面向对象的思路,所以现在我们来学习在结构体的基础上如何去定义一个方法.结构体(类)+方法=完 ...

  7. VScode中Go的相关插件的安装

    一.安装Go插件失败 使用VScode时,当我们安装完go语言扩展时,新建一个go的源码文件,进行保存时,会提示我们需要安装一些go的扩展插件,可别小看这些插件,这些插件都是非常有用的,比如说自动补全 ...

  8. 1.5 GO json转Map

    使用GO将show slave status查询返回的json串转为Map类型 package main import ( "encoding/json" "fmt&qu ...

  9. mysql初始化

    注意:--install前,必须用mysql启动命令的绝对路径 # 制作MySQL的Windows服务,在终端执行此命令: mysqld --install # 移除MySQL的Windows服务,在 ...

  10. oracle数据库的备份与还原

    转自:https://www.cnblogs.com/ylldbk/p/5613365.html 数据导出: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daoc ...