当 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 为下一次插入获取自动生成的 ID

如何在 Spring Batch 中使用 Spring 事务支持

Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?

(Spring Batch)为啥表'batch_job_instance'已经存在?

禁用 Spring Batch 作业

JDBC_批处理Batch_插入2万条数据的测试