mybatis批量插入insert时报错
报错信息:
传入的表格格式数据流(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时报错的更多相关文章
- mybatis批量插入oracle时报错:unique constraint (table name) violated
mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.
- SQL Server 2008 批量插入数据时报错
前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...
- 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束
Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...
- 【转载】MyBatis批量插入数据(insert)
介绍:MyBatis批量插入数据,原理就是在xml文件中添加 foreach 语句,然后MyBatis自动在values后面添加多个括号: XML文件如下: <?xml version=&quo ...
- mybatis批量插入数据到oracle
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 oracle批量插入使用 insert a ...
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...
- 160421、MyBatis批量插入数据
在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些 ...
- oracle+mybatis批量插入踩坑记
最近在项目中需要使用oracle+mybatis批量插入数据,因为自增主键,遇到问题,现记录如下: 一.常用的两种sql写法报错 1.insert ... values ... <insert ...
- MyBatis 批量插入数据的 3 种方法!
批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于<MyBatis Plus 批量数据插入功能,yyds!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...
随机推荐
- 【bzoj3209】: 花神的数论题 数论-DP
[bzoj3209]: 花神的数论题 首先二进制数中1的个数最多就是64个 设所有<=n的数里二进制中1的个数为i的有a[i]个 那么答案就是 然后快速幂 求a[i]可以用DP 设在二进制中从 ...
- 51nod1448(yy)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1448 题意: 中文题诶~ 不过要仔细看题, 原来颜色是被覆盖 ...
- springboot结合swagger生成接口文档
原文链接:https://www.cnblogs.com/xu-lei/p/7423883.html https://www.jianshu.com/p/b9ae3136b292 前后台分离的开发渐渐 ...
- 树链剖分【洛谷P4114】 Qtree1
P4114 Qtree1 题目描述 给定一棵n个节点的树,有两个操作: CHANGE i ti 把第i条边的边权变成ti QUERY a b 输出从a到b的路径中最大的边权,当a=b的时候,输出0 码 ...
- oracle Date format日期和月份不补0
格式化日期,日,月只有一位小数的只显示一位,不自动加0,在dd/mm 前面加上fm即可去掉前面的0 如:select to_char(t,'YYYY/fmMM/fmDD') from testdata ...
- VS2010 简单ATL COM开发
http://blog.csdn.net/wangwenjing90/article/details/8771934#reply http://blog.csdn.net/wangwenjing90/ ...
- doors dxl 遍历object 查找
Module m = current; //m = edit(“xxx”) Object o for o in m do { string sht = o.”shtName” Buffer bf=cr ...
- 1.Hibernate框架
1.分层体系结构与持久化 三层体系结构: 分层体系结构: 指的是将系统的组件分隔到不同的层中,每一层中的组件应保持内聚性,并且应大致在同一抽象级 别: 每一层都应与它下面的各层保持 ...
- Lambda 快速改造
对于只有一个参数的接口类,可以使用e->{} idea会给出快速提示 先写正常的表达式 将虚线处直接删掉, 在原来的方法参数和左大括号之间加上 -> 改造后比原来少了几行, 对于熟手阅读 ...
- 27-----BBS论坛
BBS论坛(二十七) 27.首页帖子列表布局完成 (1)apps/models.py 把帖子跟用户关联起来 class PostModel(db.Model): __tablename__ = 'po ...