Как определить нарушение ограничения базы данных в Java? - PullRequest
4 голосов
/ 27 января 2012

Я полагаюсь на базу данных, чтобы сообщить мне, если есть нарушение уникальности, поэтому я хотел бы знать, когда полученное исключение является своего рода нарушением ограничения.Похоже, это именно то, что мне нужно: java.sql.SQLNonTransientException

Но это новинка для 1.6, и я не уверен, что мои драйверы баз данных достаточно новые.Я использую много СУБД и у меня много клиентов, поэтому сложно рассчитывать на актуальность драйвера.

Существует ли общий способ проверки на наличие этого пре-Java 1.6, кроме поиска сообщения об исключении для"ограничение"

Ответы [ 2 ]

10 голосов
/ 27 января 2012

Нет, общего механизма для этого нет. Это зависит от базы данных и используемого вами драйвера JDBC.

SQLException имеет getErrorCode и getSQLState методы, которые возвращают информацию, которую вы можете использовать для определения точного значения данного исключения, но вам придется сделать его специфичным для драйвера + базы данных.

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

2 голосов
/ 27 января 2012

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

  • Состояние SQL
  • Код поставщика
  • Фактический текст сообщения (зависит от драйвера!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...