适用于更新的DB2 JDBC查询不适用于batchUpdate

时间:2016-03-28 16:47:09

标签: java spring jdbc db2 zos

我正在尝试在程序中实现批量更新,我想我可能会遇到DB2 jdbc驱动程序中的错误或其他问题。这是我的疑问:

insert into CONTENTSOURCE (CONTENTSOURCE_ID, CS_NAME) values (?, ENCRYPT(CAST(? as VARCHAR(280) FOR BIT DATA)))

以下是我对一个弹簧JdbcTemplate的调用,单个插件可以正常工作。

query = QUERY_INSERT_ENCRYPT;
insert.update(
                query,
                new Object[] {
                        contentSourceId,
                        contentSourceObject.getContentSourceName()
                                .getBytes() });

但是当我批量尝试相同的操作时,我收到的错误似乎不适用于我的查询。

insertArgs.add(new Object[] { contentSource.getContentSourceId(),
                contentSource.getContentSourceName().getBytes() });
returnArray = batchInsert.batchUpdate(QUERY_INSERT_ENCRYPT, insertArgs);

运行batchUpdate时,每一行都获得一个SQLCODE -312,但我没有对变量做任何事情。以下是从异常中删除的错误的一些输出。

Server error message: A NON-ATOMIC INSERT STATEMENT ATTEMPTED TO PROCESS MULTIPLE ROWS OF DATA, BUT ERRORS OCCURRED

--------------- SQLCA ---------------

Error code: -254

SQLERRMC: INSERT

  token 0: INSERT

SQLERRP: DSNXRINS

SQLERRD(1): -400

SQLERRD(2): 0

SQLERRD(3): 0

SQLERRD(4): -1

SQLERRD(5): 0

SQLERRD(6): 0

SQLSTATE: 22530

Server error message: VARIABLE <unknown> IS NOT DEFINED OR NOT USABLE

--------------- SQLCA ---------------

Error code: -312

SQLERRMC: <unknown>

  token 0: <unknown>

SQLERRP: DSNXRIHS

SQLERRD(1): -996

SQLERRD(2): 0

SQLERRD(3): 0

SQLERRD(4): -1

SQLERRD(5): 0

SQLERRD(6): 0

SQLSTATE: 42618

我从很久以前就发现了驱动程序的不同级别/版本的错误修复,所以我很困惑这是否是同一个问题。 http://www-01.ibm.com/support/docview.wss?uid=isg1PK85150#more 相关摘录:

  

所有连接:SQLCODE312(-312)带   “SqlSyntaxErrorException:VARIABLE未定义   运行PureQuery客户端时报告了“无法使用”   与DB2 z / OS的静态执行模式连接上的优化器   版本8或以上。问题与此有关   驱动程序使用的多行插入(MRI)支持   连接到DB2 z / OS时实现executeBatch()   版本8或以上。在这种情况下,语句受到约束   没有MRI用于动态执行模式但是   用MRI格式错误地执行静态   执行模式。 (115716)

所以,我做错了什么,或者是否可能在驱动程序中出现问题,我应该向IBM提出一个问题?

0 个答案:

没有答案