1

我正面临 mybatis-spring 非常奇怪的问题,它不断给我的 mysql 语法异常

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 'CREATE TEMPORARY TABLE IF NOT EXISTS temptable AS(
                select c.tmpid,h.val' at line 4
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:368)
    at com.sun.proxy.$Proxy20.selectOne(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:163)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:95)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
    at com.sun.proxy.$Proxy23.getValue(Unknown Source)
    at com.mypackage.service.getValue(service.java:260)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.cache.interceptor.CacheInterceptor$1.invoke(CacheInterceptor.java:52)
    at org.springframework.cache.interceptor.CacheAspectSupport.invokeOperation(CacheAspectSupport.java:317)
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:350)
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:299)
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)

以下是查询:

CREATE TEMPORARY TABLE IF NOT EXISTS temptable AS(
                select c.tmpid,h.value from xyz c
                left join pqr h 
                on h.tmpid = c.tmpid
                where h.date = (select max(date) from abc where tmpid = c.tmpid)
            );
 select * from temptable;
 drop table temptable;

仅当我在服务器上部署时才会发生这种情况。在本地它工作正常,没有问题。

在本地我使用服务器版本:5.5.27-log MySQL 社区服务器(GPL),但在服务器上它的服务器版本:5.5.44-0+deb7u1(Debian)

我怀疑服务器版本问题,但没有找到任何东西。

以下是我的 jar 版本: mybatis:3.3.0 mybatis-spring:1.2.3 mysql:5.1.36

它在某种意义上说它在本地工作得非常好,因此推出了无效语法的可能性。

我还尝试使用相同的查询创建 .sql 文件,并在服务器上的 mysql 命令行上触发它,它返回了完美的结果。

有没有人有任何指示?

4

1 回答 1

1

mybatis 抛出的异常将我带到了不同的方向。我错过了在服务器上添加的连接 URL 的问题。?allowMultiQueries=true 需要设置为允许执行多个语句。

于 2015-09-11T20:40:26.367 回答