我有一个 Spring Batch 2.2.7 应用程序,一直运行良好,但今天开始抛出“无效列”。
我在 DataGrip 中运行了以下 SQL,只是为了确保它工作正常。
SELECT * FROM (SELECT * FROM Equipment WHERE rowNum <
10 ORDER BY id ASC) WHERE ROWNUM <= 10
代码:
factoryBean.setDataSource(dataSource);
factoryBean.setSelectClause("select *");
factoryBean.setFromClause("from EQUIPMENT");
factoryBean.setSortKey("ID");
factoryBean.setWhereClause("where rowNum < 10");
SQL 没有改变,数据库架构没有改变,代码没有改变。 12 小时前还可以,但现在就不行了。什么给出?.
我尝试通过在设置属性后重新启动应用程序来进一步解决这个问题 logging.level.org.springframework.jdbc.core=TRACE
这导致了以下输出日志。
2020-06-05 15:37:37.162 DEBUG 17276 --- [ main] o.s.jdbc.core.JdbcTemplate : Executing SQL query [SELECT * FROM (SELECT * FROM Equipment WHERE rowNum < 10 ORDER BY id ASC) WHERE ROWNUM <= 10]
2020-06-05 15:37:37.715 ERROR 17276 --- [ main] o.s.batch.core.step.AbstractStep : Encountered an error executing step xxxxxxxxxx in job yyyyyyyyyyy
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT * FROM (SELECT * FROM Equipment WHERE rowNum < 10 ORDER BY id ASC) WHERE ROWNUM <= 10]; nested exception is java.sql.SQLException: Invalid column name
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235) ~[spring-jdbc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1443) ~[spring-jdbc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:388) ~[spring-jdbc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452) ~[spring-jdbc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462) ~[spring-jdbc-5.2.6.RELEASE.jar:5.2.6.RELEASE]
at org.springframework.batch.item.database.JdbcPagingItemReader.doReadPage(JdbcPagingItemReader.java:210) ~[spring-batch-infrastructure-4.2.2.RELEASE.jar:4.2.2.RELEASE]
最佳答案
感谢http://shanhe.me/2011/05/15/read-carefully-spring-jdbctemplate-bad-sql-grammar-exception ,我能够解决这个问题。
SQL 语法没有问题。
我发现我对表架构做了很小的更改。我重命名了一个专栏。我用来映射设备表的 RowMapper 仍然使用旧的列名,因此出现了问题。
给 Spring jdbc 团队的建议:当您抛出 ...jdbc.BadSqlGrammarException 时,您能否向用户建议他们的列映射可能是错误的。由于您没有对此错误进行任何跟踪记录,至少当您发现时,您可以建议可能存在映射错误。看来我不是唯一遇到这个问题的人。
关于java - Spring Batch 2.2.7 应用程序抛出 "Invalid column name"。非常简单的代码炸弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62213361/