SpringJDBC的JdbcTemplate在MySQL5.7下不支持子查询的问题
2017-04-10 14:35
471 查看
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的源码来调查。
相关文章推荐
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
- Spring+NamedParameterJdbcTemplate+NamedParameterJdbcDaoSupport+JDBC 命名参数支持
- mysql的jdbc中fetchsize支持的问题
- Elasticsearch同步mysql(logstash-input-jdbc)和一些查询问题
- Spring对JDBC封装JdbcTemplate的概述与查询功能
- MySQL调用JDBC查询数据全部加载的问题
- Mybatis与spring项目中遇到的奇怪的问题:ClassNotFoundException: com.mysql.jdbc.Driver
- Spring对JDBC的支持JdbcTemplate模板类
- Spring 对JDBC的支持(JdbcTemplate)
- MySQL 5.7.9版本sql_mode=only_full_group_by问题 用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyn
- org.springframework.jdbc.core.simple.SimpleJdbcTemplate queryForMap 方法在查询结果为空时抛出异常
- Spring对JDBC的支持JdbcTemplate模板类
- Spring-jdbc:使用支持具名参数的JdbcTemplate
- Spring-JDBC:在使用JdbcTemplate进行条件查询时没有返回数据,但是sql直接在数据库中执行是有数据返回的。
- 问题:Spring如何支持JDBC
- 关于mysql 数据库使用spring 2.0低版本 JdbcTemplate.queryForList 查询结果别名不起作用的解决方法
- 使用spring的jdbcTemplate-----用JDBC模板查询数据库
- mysql jdbc 查询连接问题
- Spring对JDBC的模板支持——JdbcTemplate
- Spring对JDBC的支持JdbcTemplate模板类