Уникальный индекс MySQL, используемый в качестве метода обработки исключений в Java - PullRequest
2 голосов
/ 22 июня 2009

Я хочу знать, стоит ли ловить исключение на основе уникального индекса SQL в Java.

я хочу поймать исключение, например, «дублирующаяся запись для 1-0», если так, то обработать исключение, в противном случае, правильно вставить в таблицу базы данных?

Ответы [ 3 ]

2 голосов
/ 22 июня 2009

Я говорю, что вы не делаете этого по двум причинам:

  • сообщения об ошибках немного неясны: ОШИБКА 1062 (23000): повторяющаяся запись 'xxx' для ключа 1 . Вы всегда уверены на 100%, какой ключ равен 1?
  • привязывает вас к конкретному поставщику базы данных

Мне проще транзакционно :

  • проверка существования строки;
  • сгенерировать исключение, если строка уже существует;
  • вставить новую строку.

Проблемы с производительностью :

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

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

Но, как всегда, измерьте.

1 голос
/ 22 июня 2009

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

1 голос
/ 22 июня 2009

Не понимаю, почему нет. Это, вероятно, более эффективно, чем выполнение запроса перед вставкой. Возможно, лучше поймать код ошибки исключения, чем распознавать сообщение об ошибке.

...