zoukankan      html  css  js  c++  java
  • SpringJDBC的JdbcTemplate在MySQL5.7下不支持子查询的问题

    org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [   SELECT * FROM `AAAA` Z LEFT JOIN  (SELECT * FROM `BBBB`         where targetdate >= 20150901) M  ON Z.TargetDate = M.TargetDate...]; 
    nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'DB名.*' doesn't exist at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:645) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722) at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:859)

    从上面的ErrorLog中可以看出,通过JdbcTemplate的queryForRowSet方法执行包含有子查询的SQL语句时发生异常。

    SpringJDBC版本为4.2.5-Release,相同的语句在测试环境的MySQL上执行无误,但在生产环境的MySQL5.7版本中,发生上述异常。

    排错过程:

    1,针对常见的表名大小写问题进行调查发现MySQL配置无误。

    2,修改SQL去除子查询后执行无误。

    3,直接通过phpMyAdmin执行该条包含子查询的语句也执行无误。

    4,切换为JavaJDBC实现代码后,该包含子查询的语句也执行无误。

    由此大致可以推断是JdbcTemplate本身的问题。

    具体原因需要深入到SpringJDBC4.2.5的源码来调查。

  • 相关阅读:
    SqlServer 查看数据库中所有存储过程
    SqlServer 查看数据库中所有视图
    SqlServer 查询表的详细信息
    SqlServer 遍历修改字段长度
    net core 操作Redis
    Tuning SharePoint Workflow Engine
    Open With Explorer
    Download language packs for SharePoint 2013
    Change Maximum Size For SharePoint List Template when Saving
    Six ways to store settings in SharePoint
  • 原文地址:https://www.cnblogs.com/csliwei/p/6688931.html
Copyright © 2011-2022 走看看