最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis執(zhí)行update批量更新時報錯的解決方案

 更新時間:2022年03月11日 10:49:26   作者:張思全  
這篇文章主要介紹了mybatis執(zhí)行update批量更新時報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

執(zhí)行update批量更新時報錯

在使用Mybatis 批量更新時

想要批量更新時通常在mapper中這么寫:

定義Mapper  Dao接口中定義

最后在service中調用

生成的sql直接放到mysql中運行完全沒有問題,但是mybatis執(zhí)行的時候卻會報錯:

<span style="color:#ff0000;">八月 29, 2016 4:17:08 下午 org.apache.catalina.core.StandardWrapperValve invoke
嚴重: Servlet.service() for servlet [springMVC] in context with path [/yihg-travel-api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: 
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update assistant_group_guide
             SET guide_name = '陳玉梅(華1)',
                gui' at line 15
### The error may involve com.yihg.travel.api.dao.AssistantGroupGuideMapper.updateByGuideGroupId-Inline
### The error occurred while setting parameters
### SQL: update assistant_group_guide     SET guide_name = ?,     guide_certificate_no = ?,     guide_license_no = ?,     guide_mobile = ?,          guide_photo = ?,     driver_id = ?,     driver_name = ?,           driver_license_car = ?,          driver_mobile = ?,           driver_photo = ?,          state = ?     where group_id = ? and guide_id = ?    ;     update assistant_group_guide     SET guide_name = ?,     guide_certificate_no = ?,     guide_license_no = ?,     guide_mobile = ?,          guide_photo = ?,     driver_id = ?,     driver_name = ?,           driver_license_car = ?,          driver_mobile = ?,           driver_photo = ?,          state = ?     where group_id = ? and guide_id = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update assistant_group_guide
             SET guide_name = '陳玉梅(華1)',
                gui' at line 15
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update assistant_group_guide
             SET guide_name = '陳玉梅(華1)',
                gui' at line 15] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update assistant_group_guide
             SET guide_name = '陳玉梅(華1)',
                gui' at line 15
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
    at com.mysql.jdbc.Util.getInstance(Util.java:387)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192)
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:2931)
    at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:2929)
    at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:131)
    at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:493)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
    at com.sun.proxy.$Proxy18.update(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:295)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
    at com.sun.proxy.$Proxy23.updateByGuideGroupId(Unknown Source)
    at com.yihg.travel.api.service.impl.AssistantGroupServiceImpl.findToErpGroupInfo(AssistantGroupServiceImpl.java:192)
    at com.yihg.travel.api.controller.query.AssistantGuestController.toYihgErpGroupList(AssistantGuestController.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)</span>

這是因為配置mysql的時候沒有開啟批量插入,不開啟的話只能允許操作一條sql語句,所以只需要修改一處即可:將properties配置文件中的數據庫連接信息URL后面添加上&allowMultiQueries=true就可以了,問題完美解決。

如圖:

注意:請不要將“&”符號寫成“&amp;”

同時執(zhí)行多條sql的辦法

1、最簡單的辦法:在MySQL的連接字符串中設置allowMultiQueries參數置為true。(只有MySQL Connector/J 3.1.1以上版本才支持) 。例如:在jdbc下設置連接字符串的時候設成如下的形式:

 jdbc:mysql://172.17.42.197:3306/yihg_openapi?useUnicode=true&amp;characterEncoding=utf8&allowMultiQueries=true就可以執(zhí)行多條語句了

在odbc下也是可以設置的,方法如下:

設置 ODBC — 配置 –Detials — Flags 3 — 鉤上 Allow multiple statements,這樣就可以了。

結論:第一種方式最簡單。

2、在程序中對SQL語句以分號拆分成多條SQL語句,然后使用Statement的addBatch方法,最后executeBatch就行。

執(zhí)行update失敗問題

今天在進行分布式重構項目的時候碰到一個問題,在執(zhí)行sql的時候只有update不能成功,其他語句都可以正常執(zhí)行,報錯如下: 版本:org.mybatis:mybatis:3.4.5 

接口:

@UpdateProvider(type = ManagerProvider.class, method = "updateManager")
int updateManager(Manager manager) throws Exception;

報錯信息

Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: 不允許的操作; 

uncategorized SQLException for SQL []; SQL state [99999]; error code [17090]; 不允許的操作; nested exception is java.sql.SQLException: 不允許的操作

說下原因

由于mybatis在執(zhí)行insert和update的時候都默認生成key,然后注入,所以在執(zhí)行update的時候會報錯。

解決辦法

在接口上增加注解 @Options(useGeneratedKeys = false),不讓mybatis自動注入key,問題解決。

@UpdateProvider(type = ManagerProvider.class, method = "updateManager")
@Options() //    @Options(useGeneratedKeys = false)
int updateManager(Manager manager) throws Exception;

最后說明一點,版本:org.mybatis:mybatis:3.4.4這個版本沒有此類問題。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring+SpringMVC+MyBatis深入學習及搭建(一)之MyBatis的基礎知識

    Spring+SpringMVC+MyBatis深入學習及搭建(一)之MyBatis的基礎知識

    這篇文章主要介紹了Spring+SpringMVC+MyBatis深入學習及搭建(一)之MyBatis的基礎知識,需要的朋友可以參考下
    2017-05-05
  • SpringBoot+Mybatis使用Mapper接口注冊的幾種方式

    SpringBoot+Mybatis使用Mapper接口注冊的幾種方式

    本篇博文中主要介紹是Mapper接口與對應的xml文件如何關聯的幾種姿勢,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Java中request對象常用方法匯總

    Java中request對象常用方法匯總

    這篇文章主要為大家詳細匯總了Java中request對象的常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Java String類詳解_動力節(jié)點Java學院整理

    Java String類詳解_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java String類詳解,本文經多方資料的收集整理和歸納,最終撰寫成文,非常不錯,值得收藏,需要的的朋友參考下
    2017-04-04
  • java.lang.ArrayIndexOutOfBoundsException數組越界異常問題解決

    java.lang.ArrayIndexOutOfBoundsException數組越界異常問題解決

    這篇文章主要給大家介紹了關于java.lang.ArrayIndexOutOfBoundsException數組越界異常問題解決的相關資料,數組越界訪問是一個非常嚴重的問題,文中通過圖文將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 反對使用Spring封裝的多線程類原因

    反對使用Spring封裝的多線程類原因

    這篇文章主要介紹了反對使用Spring封裝的多線程類原因,文章圍繞主題展開詳細內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Java 遍歷list和map的方法

    Java 遍歷list和map的方法

    這篇文章主要介紹了Java 遍歷list和map的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Spring注解開發(fā)生命周期原理解析

    Spring注解開發(fā)生命周期原理解析

    這篇文章主要介紹了Spring注解開發(fā)生命周期原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 如何在Java SpringBoot項目中配置動態(tài)數據源你知道嗎

    如何在Java SpringBoot項目中配置動態(tài)數據源你知道嗎

    這篇文章主要介紹了SpringBoot如何在運行時動態(tài)添加數據源,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot框架如何管理Xml和CSV

    SpringBoot框架如何管理Xml和CSV

    XML是可擴展標記語言,是一種用于標記電子文件使其具有結構性的標記語言。CSV是一種通用的、相對簡單的文件格式,通常被用在大數據領域,進行大規(guī)模的數據搬運操作,本文將介紹SpringBoot框架如何管理Xml和CSV
    2021-06-06

最新評論

邻水| 读书| 云阳县| 桦南县| 建瓯市| 武义县| 黎川县| 九龙坡区| 禄丰县| 迭部县| 白玉县| 寿光市| 苏州市| 武安市| 白银市| 宜川县| 保康县| 定远县| 漾濞| 郴州市| 舒城县| 长武县| 焦作市| 新野县| 财经| 宜章县| 葵青区| 庆云县| 青田县| 永仁县| 多伦县| 汶上县| 拜泉县| 蕲春县| 丹凤县| 大庆市| 东阿县| 芦山县| 海原县| 寻乌县| 普安县|