Я использую драйвер postgresql jdbc и есть класс PSQLException
, унаследованный от SQLException
. Что мне лучше поймать SQLException
или PSQLException
?PSQLException catch в JAVA
0
A
ответ
0
Если вы действительно хотите, чтобы поймать исключение, так что ваш метод будет обрабатывать исключение и не нужно будет объявить SQLException
в пункте throws
, то вам нужно будет поймать SQLException
. Это связано с тем, что API JDBC объявляет о выбросе исключений SQL.
Большая часть PSQLExceptions
будет мы все равно завернутые в более общем SQLException
, поэтому доступ к ним, вы можете использовать что-то вроде следующего:
public static <T> T unwrapCause(Class<T> clazz, Throwable e) {
while (!clazz.isInstance(e) && e.getCause() != null && e != e.getCause()) {
e = e.getCause();
}
return clazz.isInstance(e) ? clazz.cast(e) : null;
}
то в вашем коде вы получите PSQLException
вроде этого:
} catch (SQLException e) {
PSQLException psqle = unwrapCause(PSQLException.class, e);
if (psqle != null) {
... // handling of the PostgreSQL specific exception
}
}
Это связано с более четким сообщением об исключении. вы можете использовать оба по одному, если вы не уверены! – Prashant