Я вставляю записи в таблицу в базе данных Db2-400 (Db2 i)
, используя пакет JDBC
prepared statement
.В таблице есть первичный ключ.
Если в любом операторе в пакете есть дубликат ключа, он выдает BatchUpdateException
(что ожидается).Но когда есть BatchUpdateException
, он не выполняет все последующие операторы в пакете.
Предположим, что пакет имеет 5 операторов.Исключение составляет только третье утверждение.Тогда 4-е и 5-е утверждение также не выполняется.
В отличие от Db2 LUW, который успешно выполняет все операторы после этого сбойного оператора.
Пример:
Таблица UQTEST имеет первичный столбец.Код добавляет ключ как 2, когда значение i равно 3, чтобы дублировать ключ для оператора.
PreparedStatement stmt = conn.prepareStatement("INSERT INTO LIBTEST.UQTEST VALUES(?, ?)");
for (int i = 1; i <=5; i++)
{
if (i ==3)
{
stmt.setInt(1, 2);
}
else
{
stmt.setInt(1, i);
}
stmt.setString(2, "Abc");
stmt.addBatch();
}
try
{
stmt.executeBatch();
}
catch(BatchUpdateException ex)
{
int[] updatecounts = ex.getUpdateCounts();
System.out.printlns(updatecounts);
}
После выполнения этого кода в таблицу вставляются только 2 записи:
1 Abc
2 Abc
Я использую jt400.jar и используемый драйвер JDBC:
com.ibm.as400.access.AS400JDBCDriver()
Я хочу, чтобы все эти операторы были выполнены успешно, без каких-либо исключений.