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!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...
随机推荐
- SP8791 DYNALCA - Dynamic LCA
\(\color{#0066ff}{ 题目描述 }\) 有一个森林最初由 n (\(1 \le n \le 100000\))n(\(1\leq n\leq 100000\)) 个互不相连的点构成 你 ...
- 树状数组【bzoj1103】: [POI2007]大都市meg
1103: [POI2007]大都市meg 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡 ...
- A Simple Problem with Integers BZOJ3212 线段树
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
- springboot整合activemq(二),消费均匀分析
问题分析:当如果多个消费者是什么情况呢 topic消费是友多个消费者的,是支持的,但是queue是支持,但是不能保证多个消费均匀消费,在分布式环境下怎么操作呢: 看案例: 在前面整合代码执行: 浏览器 ...
- 解决SMON_SCN_TO_TIME_AUX表损坏故障
同事在给客户做数据库巡检的过程中,发现其中一个数据库的alert日志中报了一个坏块的错误信息,具体如下: Reading datafile '+DATA_DW/xtdw/datafile/sysaux ...
- 树莓派编译安装 EMQ 服务器
前言 EMQ 是一款开源的物联网 MQTT 消息服务器,使用 Erlang/OTP 语言平台设计,在 DIY 智能家居时可以作为网关,前几天摸索了一下在树莓派中安装 EMQ 的方法,记录一下. 步骤 ...
- Linux安全加固--精简启动项
1.关闭不必要的服务 1.1.centos6.x服务操作命令 1.1.1.常用命令 查看服务开启或关闭状态: [root@localhost ~]# chkconfig --list aegis 0: ...
- java算法外传之靠工资多久能实现小目标...
public static void main(String[] args) { //小目标 final int smallGoal=100_000_000; //月份 int month=1; // ...
- [转载]jQuery中的html,val,text区别
在jquery中 text() 返回目标元素所包含的所有文本内容,注意不包含html标签 alert($("#shuru").text()); 1 html() 返回目标元素所包含 ...
- Install NGINX, PHP-FPM (5.6) on CentOS 6
Installing NGINX with PHP on CentOS 6 can be a hassle depending on the install and packages you use. ...