欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

ibatis结合oracle批量插入三种方法的测评

时间:2020-11-04 11:42:36|栏目:JAVA代码|点击:

第一种

< insert id =" insert_table " parameterClass ="java.util.List" >  
  <![CDATA[ 
    insert into sj_test( col1 , col2 , col3 ) values 
  ]]>  
  < iterate conjunction ="," >  
    <![CDATA[ 
      (#test[]. col1 #, # test []. col2 #, # test []. col3 #) 
    ]]>  
  </ iterate >  
</ insert > 

这种方式是网上最常见的,但是也是问题最大的,今天把我彻底纠结了,弄了几个小时,最后发现,Oracle不支持 一个insert多个values的方式,不知道网友们被坑到了没,好像MySQL支持这种方式,所报的错误:ORA-00933:SQL命令未正确结束

第二种

<insert id="insert_table " parameterClass="java.util.List">
 insert all
 <iterate conjunction="">
 into sj_test( col1 , col2 , col3 ) values 
 (#test[]. col1 #, # test []. col2 #, # test []. col3 #) 
 </iterate>
 <!--必须要加上 -->
 select * from dual
</insert>

这种方式,Oracle支持,其他的数据库就不知道支不支持,但是这种方式有个局限性,就是你插入的表的列数* 你插入的行数 <1000 才有效

如:

我今天需要插入的表有13列字段,总共需要插入246行,在执行的时候

他就报:ORA-24335 cannot support more than 1000 columns

第三种方式

<insert id="insert_table" parameterClass="java.util.List">
insert into sj_test( col1 , col2 , col3 ) values  select 
col1 , col2 , col3 
from (
<iterate conjunction=" union all ">
select 
#test[].col1# as col1 , #test []. col2# as col2, # test[].col3# as col3 from dual
</iterate>
)
</insert>

这种方式 是先将List里面的值,循环拼接成一个查询虚拟表,然后再通过查询虚拟表,获取每一行的数据 插入到你需要插入的表里面去.    这样的话有个需要注意的地方,就是你拼接的SQL语句的长度有没有超过Oracle的最大长度,不过Oracle的最大长度是64KB,你的SQL语句应该不会写这么长吧?

总结

上一篇:java中栈和队列的实现和API的用法(详解)

栏    目:JAVA代码

下一篇:java数据结构与算法之插入排序详解

本文标题:ibatis结合oracle批量插入三种方法的测评

本文地址:http://www.codeinn.net/misctech/19165.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有