我将java对象中的数据作为data1,data2。
data1和data2一起在myTable中形成一个复合键,我想在其中插入对象。
写作是批量发生的。像10个插入语句一样使用10个对象准备并作为批处理执行。
我想用约束插入上面的数据:data1 + data2不应该已经存在于myTable中,即data1 + data2应该是唯一的 - 如果是唯一的则写入else只是忽略。
我使用的查询是:
Insert into mySchema.myTable(column1, column2)
select 'abc', '123'
from SYSIBM.DUAL
where not exists
( select 1
from mySchema.myTable A
where 'abc' = A.column1
and '123' = A.column2
)
单独运行以上查询以成功运行单组数据。
但是,在批处理方案中运行时,我收到“com.ibm.db2.jcc.b.ie:非原子批处理失败”。错误。
我认为这与在批处理场景中使用SYSIBM.DUAL有关。
失败的代码:
插入查询:
Insert into mySchema.myTable(column1, column2)
select ?,? from SYSIBM.DUAL
where not exists (
select 1 from mySchema.myTable A
where ?=A.column1 and ?=A.column2)
声明制定者:
ps.setString(1, item.getColumn1());
ps.setString(2, item.getColumn2());
ps.setString(3, item.getColumn1());
ps.setString(4, item.getColumn2());
其中item是包含要写入的两列的java对象。
错误是:
org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;错误的SQL语法[插入mySchema.myTable(column1,column2)选择?,?来自SYSIBM.DUAL不存在(从mySchema.myTable A中选择1,其中?= A.column1和?= A.column2)];嵌套异常是com.ibm.db2.jcc.b.ie:非原子批处理失败。批次已提交,但批次的单个成员至少发生了一个例外。使用getNextException()来检索特定批处理元素的异常。