2015-04-06 2 views
0

Я использую драйвер postgresql jdbc и есть класс PSQLException, унаследованный от SQLException. Что мне лучше поймать SQLException или PSQLException?PSQLException catch в JAVA

+0

Это связано с более четким сообщением об исключении. вы можете использовать оба по одному, если вы не уверены! – Prashant

ответ

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 
    } 
}