开发者社区> 问答> 正文

mybatis 批量插入 报错?报错

框架是springMvc+spring3.1+mybatis3.1.1

数据库是ms sqlserver2005

执行语句是:

<insert id="batchInserIcon">
    INSERT INTO T_icon (
        name,iconcls
    )
    VALUES
    <foreach collection="list" item="item" index="index" separator=",">
    (
        #{item.name}, #{item.iconCls}
    ) 
    </foreach>
</insert>

报的错误是:

二月 04 2013 16:16:12,399 DEBUG java.sql.Connection - ooo Using Connection [ ProxyConnectionID:1]
二月 04 2013 16:16:12,399 DEBUG java.sql.Connection - ==>  Preparing: INSERT INTO T_icon ( name,iconcls ) VALUES ( ?, ? ) , ( ?, ? ) 
二月 04 2013 16:16:12,399 DEBUG java.sql.PreparedStatement - ==> Parameters: 金将军(String), xxxx(String), haha(String), icon-ok(String)
二月 04, 2013 4:16:12 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet springServlet threw exception
com.microsoft.sqlserver.jdbc.SQLServerException: ',' 附近有语法错误

请教如何解决?

展开
收起
爱吃鱼的程序员 2020-06-22 21:53:50 995 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    我试过了,INSERTINTOTVALUES(),()这个是mysql的语法,oracle和mssql都不支持这个不会解析啊,只是提供了一个模板,往里面套,生成SQLmybatis不解析后再传到数据库执行,郁闷SQL有问题呗,看最后执行的SQL,估计和你separator=","这个有关系回复<aclass='referer'target='_blank'>@roywang:二月04201316:16:12,399DEBUGjava.sql.PreparedStatement-==>Parameters:金将军(String),xxxx(String),haha(String),icon-ok(String)回复<aclass='referer'target='_blank'>@roywang:二月04201316:16:12,399DEBUGjava.sql.Connection-==>Preparing:INSERTINTOT_icon(name,iconcls)VALUES(?,?),(?,?)语句是:insertintotable(column1,column2,column3)values(?,?,?),(?,?,?)mapper文件上的语句已经贴了执行最后mybatis生成的SQL,就知道了回复<aclass='referer'target='_blank'>@kakaximu:mybatis并没有任何具体数据库绑定的部分,它只是将你写的sql语句预编译,然后填充你在模版里面提供的参数,然后执行罢了。你开debug,看控制台上打印出来的预编译sql语句,估计就知道错在哪了。

    2020-06-22 21:54:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载