Как игнорировать все ошибочные операторы и выполнять все хорошие в JDBC executeBatch? - PullRequest
2 голосов
/ 22 мая 2009

У меня есть java.sql.Statement с большим количеством пакетных операторов, добавленных с addBatch. Выполнение executeBatch вызовет BatchUpdateException после первого оператора, который нарушает ограничения базы данных и не выполнит все оставшиеся операторы в пакете. Можно ли как-нибудь выполнить все операторы в пакетном режиме, игнорируя ошибочные?

Ответы [ 3 ]

2 голосов
/ 22 мая 2009

Я думаю, что лучшим решением было бы исправить ошибочные. В чем дело? SQL? Базовые таблицы? Данные?

Исключения должны быть "исключительными". Какая ситуация настолько распространена, что вы, скорее всего, увидите ее чаще в этой партии?

Исключение говорит вам, что что-то не так. Я не хотел бы рекомендовать исправление, которое позволит вам игнорировать сообщение. Если возникает исключение, это означает, что у вас есть возможность улучшить его корневую проблему в блоке catch.

Если вы перебираете все операторы в пакете, вы можете поймать исключение для каждого из них в отдельности и просто записать ошибку Только не игнорируйте это полностью.

Но если вы не можете придумать другую стратегию восстановления, вам не повезло.

1 голос
/ 10 февраля 2011

См. BatchUpdateException: пакет не завершится для аналогичного вопроса и ответов.

В нем говорится, что Пакет завершится, как только будет сгенерировано исключение. Вы не можете выполнить только хорошие.

0 голосов
/ 27 марта 2014

хорошо, если вы хотите сохранить все данные, которые можно было вставить, просто выполните коммит и были сохранены.

зацикливание над каждым оператором в пакете невозможно, только при вызове execute batch вы получите исключение, а не для каждого оператора (addbatch), поэтому невозможно точно определить, где находится ошибка: вы можете сохранить часть из них или ничего, вы решаете (коммит или откат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...