правильный способ получить значимое исключение SQL

1

В моем предложении java try-catch я хочу уловить точную причину исключения sql (я использую Postgres, но этот вопрос применяется ко всем драйверам jdbc). Мне нужно было сделать

} catch (Throwable ex) {
        // Rollback only
        ex.printStackTrace();
        String message = ex.getMessage();
        Throwable cause = ex.getCause();
        if (cause instanceof ConstraintViolationException){
            SQLException exc = ((ConstraintViolationException)cause).getSQLException();
            if (exc instanceof BatchUpdateException){
                SQLException nextEx = ((BatchUpdateException)exc).getNextException();
                if (nextEx instanceof PSQLException){
                    message = ((PSQLException)nextEx).getMessage();
                }
            }
        }
        throw new RecordServiceException(message); 
    }

Это просто ужасно и работает только для особого типа исключения. Разве нет более общедоступного способа захвата значимого исключения sql?

Теги:
exception
jdbc

1 ответ

0

Из документов oracle: http://docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html

public static void printSQLException(SQLException ex) {

    for (Throwable e : ex) {
        if (e instanceof SQLException) {
            if (ignoreSQLException(
                ((SQLException)e).
                getSQLState()) == false) {

                e.printStackTrace(System.err);
                System.err.println("SQLState: " +
                    ((SQLException)e).getSQLState());

                System.err.println("Error Code: " +
                    ((SQLException)e).getErrorCode());

                System.err.println("Message: " + e.getMessage());

                Throwable t = ex.getCause();
                while(t != null) {
                    System.out.println("Cause: " + t);
                    t = t.getCause();
                }
            }
        }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню