• 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的源码来调查。

  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/csliwei/p/6688931.html
Copyright © 2020-2023  润新知