Как правильно перехватить исключение MySQLIntegrityConstraintViolationException? - PullRequest
3 голосов
/ 19 мая 2010

Я работаю над веб-приложением, и в тот момент, когда я отправляю формы, уникальные для пользователя,

MySQLIntegrityConstraintViolationException Duplicate entry -'username' 
for key 'PRIMARY'

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

Я действительно спрашиваю, как мне справиться с этим. Я пытался поймать это исключение, но, видимо, мой недостаток опыта настиг меня.

Буду признателен за помощь.

Есть ли лучший способ проверки дубликатов записей в базе данных?

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

Спасибо

Ответы [ 3 ]

1 голос
/ 19 мая 2010

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

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

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

1 голос
/ 19 мая 2010

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

0 голосов
/ 03 сентября 2017

У меня тоже возникла такая же проблема, попробуйте обработать исключение с помощью catch (MySQLIntegrityConstraintViolationException sql). Но не забывайте, что существует 2 типа MySQLIntegrityConstraintViolationException один для JDBC и один для JDBC4. Поэтому я рекомендую ловить оба в двух отдельных циклах try catch.

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