当 Spring Batch 插入 BATCH_JOB_EXECUTION 时出现 BadSqlGrammarException
Posted
技术标签:
【中文标题】当 Spring Batch 插入 BATCH_JOB_EXECUTION 时出现 BadSqlGrammarException【英文标题】:BadSqlGrammarException when Spring Batch inserts into BATCH_JOB_EXECUTION 【发布时间】:2020-03-25 14:19:16 【问题描述】:我正在创建一个从 CSV 文件读取并写入 DB2 数据库的 spring-batch 应用程序。
Spring-boot 版本:2.0.5.RELEASE
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc</artifactId>
<version>db2jcc4</version>
</dependency>
当 Spring Batch 尝试插入 BATCH_JOB_EXECUTION 表时,我收到了 BadSqlGrammarException。
原因:org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;错误的 SQL 语法 [INSERT into BATCH_JOB_EXECUTION(JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, VERSION, CREATE_TIME, LAST_UPDATED, JOB_CONFIGURATION_LOCATION) 值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)];嵌套异常是 com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL 错误: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=JOB_CONFIGURATION_LOCATION, DRIVER=4.26.14Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;错误的 SQL 语法 [INSERT into BATCH_JOB_EXECUTION(JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, VERSION, CREATE_TIME, LAST_UPDATED, JOB_CONFIGURATION_LOCATION) 值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)];嵌套异常是 com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL 错误: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=JOB_CONFIGURATION_LOCATION, DRIVER=4.26.14
提前感谢任何有助于解决此问题的支持和指导。
【问题讨论】:
【参考方案1】:DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=JOB_CONFIGURATION_LOCATION
从this,SQLSTATE 42703 表示An undefined column or parameter name was detected
。所以很可能是因为BATCH_JOB_EXECUTION
没有JOB_CONFIGURATION_LOCATION
列。
确保您的批处理相关表的架构与this 相同。
【讨论】:
嗨 Ken Chan, 表已创建,但缺少 JOB_CONFIGURATION_LOCATION 列。感谢您的回答。以上是关于当 Spring Batch 插入 BATCH_JOB_EXECUTION 时出现 BadSqlGrammarException的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Batch 中使用 Spring 事务支持
Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?