как обрабатывать исключения в цикле while? - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть ситуация в Java, где:

while(resultset.next()){
   try{
      //some executable prepared statements written
   }
   catch(MySQLIntegrityConstraintViolationException ex){
      //block2
   }
   catch(SQLException ex){
      //block1
   }
}

сейчас здесь, что я пытаюсь сделать, это то, что если замечено MySQLIntegrityConstraintViolationException, я должен пропустить его и просто продолжитьследующая запись ... Я не могу найти механизм для этого.Пожалуйста, кто-нибудь может предложить, что нужно сделать, чтобы исключение было проигнорировано.

Пожалуйста, дайте мне знать .. Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Понимание вашей базы данных лучше.

Здесь много вопросов.

1) участвует ли ваше подготовленное заявление в транзакции?(т.е. выполняет ли откат?)
2) обновляет ли подготовленный оператор строки?
3) можете ли вы гарантировать, что база данных находится в известном состоянии после того, как исключение будет перехвачено и обработано?

Попытка игнорировать исключение - неправильный подход.Текущий код (как показано) позволяет вам повторить подготовленный оператор после того, как исключение поймано.'MySQLIntegrityConstraintViolationException' говорит мне, что база данных не может сделать то, что вы просили;может быть дубликат ключа или удаление с использованием необходимого внешнего ключа.

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

В случае вставки дубликатов у меня были ситуации, когда мне приходилось сообщатьмеханизм БД, чтобы игнорировать дупли или указывать на дупликации таблицы / файла, должен быть передан по конвейеру.

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

0 голосов
/ 29 ноября 2010

Я думаю, что вы можете получить любое другое исключение, попробуйте выполнить следующее, чтобы выяснить, получаете ли вы другое исключение,

while(resultset.next()){
   try{
  //some executable prepared statements written
   }
   catch(Exception ex){
   if(ex instanceof MySQLIntegrityConstraintViolationException)
   continue;
   else
   ex.printStackTrace();
  }

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