Я выполняю набор операторов SQL через пакетную обработку JDBC. Как получить записи не удалось во время пакетной обработки.
Я могу получить рекорд успеха и количество неудач. Но не в состоянии получить ошибочные записи.
Statement statement = null;
try {
statement = connection.createStatement();
for (String insertQuery : insertQuerys) {
statement.addBatch(insertQuery);
}
statement.executeBatch();
} catch (Exception e) {
logger.info("Error : " + e);
} finally {
try {
statement.close();
} catch (SQLException e1) {
logger.info("Error : " + e1);
}
}
Я ожидаю, что записи, которые потерпели неудачу во время пакетной обработки JDBC.
Вы можете перехватить BatchUpdateException
которого есть метод int[] getUpdateCounts()
который возвращает массив из числа строк, затронутых каждым пакетным оператором, в том порядке, в котором они были добавлены в пакет.
Но здесь важно то, что если ваш отдельный пакетный оператор обновляет более одной строки, вы не можете точно сказать, какие строки были затронуты оператором и существуют ли они даже в таблице (в случае операторов вставки или слияния).
Statement.EXECUTE_FAILED
для операторов, которые не удалось выполнить. И в зависимости от режима транзакции и поведения драйвера (автоматическая фиксация, прерывание транзакции и т. Д.) Любой сбой может вернуть все, включая успешно выполненные операторы).
the failed record
? Когда SQL / оператор / запрос не выполняется, он возвращает только ошибку, безrecords
. Вы можете только сам оператор / запрос sql, который не удался.