插入语句原型,
< insert  id =" iterate_insert1 "  parameterClass ="java.util.List" >   
2.       <![CDATA[  
3.           insert intowsjinag_test( col1 , col2 , col3 ) values  
4.       ]]>    
5.       < iterate  conjunction ="," >   
6.           <![CDATA[  
7.               (#test[]. col1 #, # test []. col2 #, # test []. col3 #)  
8.           ]]>   
9.       </ iterate >   
10.  </ insert > 报错:
WARNING: EXCEPTION 
javax.servlet.ServletException: org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred while applying a parameter map.  
--- Check the IctProject.oppoInsertBatch-InlineParameterMap.  
--- Check the statement (update failed).  
--- Cause: java.sql.SQLException: ORA-00933: SQL 命令未正确结束 at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:459)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1054)
at org.eredlab.g4.rif.util.RequestFilter.doFilter(RequestFilter.java:119)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1045)
at org.eredlab.g4.rif.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:48)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1045)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:358)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:231)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:629)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:453)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
at org.mortbay.jetty.Server.handle(Server.java:303)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:452)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:735)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:636)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:349)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:320)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)

解决方案 »

  1.   

    sql语法错误,把sql打印出来看下就知道了
      

  2.   

    我的是oracle+ibatis,这样的模板写法是没有问题 的?
      

  3.   

    oracle没有批量新增这一说吧
      

  4.   

    楼主是看的这个吧
    http://blog.csdn.net/baijianjun123456/article/details/48371213看起来没啥问题,可以把
    insert intowsjinag_test( col1 , col2 , col3 ) values
    这句  into后面加个空格试试看看
    insert into wsjinag_test( col1 , col2 , col3 ) values
      

  5.   


    <insert id="batchInsert" parameterType="list">
    INSERT INTO role_menu(id,role_id,menu_id ) VALUES
    <foreach collection="list" item="obj" index="index" separator=",">
    (uuid(),#{obj.roleId},#{obj.menuId})
    </foreach>
    </insert>我这么写的
      

  6.   

    <insert id="insertBacthBIDR" parameterType="map" statementType="PREPARED">
    insert into ${tableName}(login_name,login_id,NAS_id,login_date,logout_date,time_duration)
    SELECT A.*
    FROM(
    <foreach collection="myList" item="item" index="index" separator="UNION ALL">
    SELECT
    #{item.login_name,jdbcType=VARCHAR} login_name,
    #{item.login_ip,jdbcType=VARCHAR} login_ip,
    #{item.NAS_ip,jdbcType=VARCHAR} NAS_ip,
    #{item.login_date,jdbcType=DATE} login_date,
    #{item.logout_date,jdbcType=DATE} logout_date,
    #{item.time_duration,jdbcType=BIGINT} time_duration
    FROM dual
    </foreach>
    )A
    </insert>
    按照这么写就行了,oracle的批量插入得用UNION ALL关键字,这里传进来的map包括表名和一个List<对象>,#{item.login_name},是对象中的login_name属性