SpringBatch 2.2.7应用程序抛出“无效列名”非常简单的工作代码

llmtgqce  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(472)

我有一个springbatch2.2.7应用程序,一直运行良好,但今天开始抛出“invalid column”。
我在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没有改变,db模式没有改变,代码没有改变。它在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]
qlzsbp2j

qlzsbp2j1#

多亏了http://shanhe.me/2011/05/15/read-carefully-spring-jdbctemplate-bad-sql-grammar-exception,我能解决这个问题。
sql语法没有问题。
我发现我对表模式做了一个非常小的更改。我重新命名了一列。我用来Map设备表的行Map器仍然使用旧的列名,因此出现了问题。
对springjdbc团队的建议:当您抛出…jdbc.badsqlgramarexception时,您能否向用户建议他们的列Map可能是错误的。由于您没有对此错误进行任何跟踪日志记录,至少在发现时,您可以建议可能存在Map错误。看来我不是唯一一个碰到这个问题的人。

相关问题