mybatis insert values 多行 SQL 命令未正确结束

坑坑洼洼

2017-03-29

32

0

问题描述:

我想一次性插入多条记录,数据库使用的oracle,crud框架为mybatis。出现如标题【SQL 命令未正确结束】的错误。

mybatis配置的SQL如下:瞧一瞧      

<insert id="insertList" parameterType="java.util.List" useGeneratedKeys="false">
    insert into TD_S_LONGSHORTLINK_JT (LINK_ID, LONG_LINK, SHORT_LINK, 
      DEAL_TIME, DESC_INFO, BAK1, 
      BAK2, BAK3)
     values
     <foreach collection="list" item="item" index="index" separator="," >  
         #{item.linkId,jdbcType=VARCHAR},#{item.longLink,jdbcType=VARCHAR},#{item.shortLink,jdbcType=VARCHAR},#{item.dealTime,jdbcType=TIMESTAMP},#{item.descInfo,jdbcType=VARCHAR},#{item.bak1,jdbcType=VARCHAR},#{item.bak2,jdbcType=VARCHAR},#{item.bak3,jdbcType=VARCHAR} 
    </foreach> 
  </insert>

解决代码如下:

<insert id="insertList" parameterType="java.util.List" useGeneratedKeys="false">
    insert into TD_S_LONGSHORTLINK_JT (LINK_ID, LONG_LINK, SHORT_LINK, 
      DEAL_TIME, DESC_INFO, BAK1, 
      BAK2, BAK3)
    <foreach collection="list" item="item" index="index" separator="UNION" >  
        select #{item.linkId,jdbcType=VARCHAR},#{item.longLink,jdbcType=VARCHAR},#{item.shortLink,jdbcType=VARCHAR},#{item.dealTime,jdbcType=TIMESTAMP},#{item.descInfo,jdbcType=VARCHAR},#{item.bak1,jdbcType=VARCHAR},#{item.bak2,jdbcType=VARCHAR},#{item.bak3,jdbcType=VARCHAR} from dual  
    </foreach>  
  </insert>

 

问题分析:

由于oracle数据库不支持values,所以只能使用 sparator='UNION'。。

如果是mysql数据库,第一种方式没有问题。

 

发表评论

全部评论:0条

houzhe11

JAVA从业者