Как поймать определенные исключения в JDBC? Примеры: исключение первичного ключа или исключение внешнего ключа.
SQLException содержит некоторую информацию, относящуюся к базе данных, связанную с исключением. Из док:
Каждое SQLException обеспечивает несколько Виды информации:
1) строка описывая ошибку. Это используется как Сообщение о исключительном состоянии Java, доступно через метод getmesage.
2) «SQLState» строка, которая следует либо в xopen SQLState Conventions или SQL 99 конвенции. Значения Строка SQLState описана в соответствующий спектр. DatabaseMetadata метод getsqlstateType может быть использован для Узнайте, возвращает ли драйвер Тип Xopen или тип SQL 99.
3) Целочисленный код ошибки, который специфичен для каждый поставщик. Обычно это будет фактический код ошибки, возвращаемый Основная база данных.
4) цепь к следующему Исключение. Это может быть использовано для обеспечения Дополнительная информация об ошибке.
Лучшим и независимым от БД способом обработки SQLException
более конкретно является определение кода состояния SQL, который может быть получен с помощью SQLException#getSQLState()
. SQLState - это 5-ти значный код, из которых первые два являются общими для всех БД, а последние три могут различаться в зависимости от БД и/или конкретного условия. Вот выдержка из spec:
Так что, чтобы определить, вызвано ли ограничение SQL Exception нарушением, можно просто сделать следующее в (вымышленном) SQLUtil
классе:
public static boolean isConstraintViolation(SQLException e) {
return e.getSQLState().startsWith("23");
}
Брайан прав, SQLException будет брошен как раз по поводу ЛЮБОЙ проблемы с JDBC. Отчасти поэтому JDBC так раздражает. JDBC помощники библиотеки Spring предоставляют переводчик исключений для просмотра SQLCode, SQLState и т.д., и бросают соответствующее DataAccessException. Существует множество этих классов исключений, и они дают вам лучшее представление о том, что пошло не так, с такими именами, как DataIntegrityViolationException, DataSourceLookupFailureException, PermissionDeniedDataAccessException и другими.
.