JdbcTemplate.execute()方法可以抛出的所有异常

时间:2019-06-10 06:37:54

标签: java spring exception spring-jdbc

我如何找出可以通过JdbcTemplate.execute()方法调用引发哪些异常。我知道它会抛出DataAccessException。但是由于DataAccessException是抛出的实际异常的父类,因此它成为非常广泛的声明。

例如,它抛出BadSqlGrammarException这是子类。我知道我可以在源代码中找到它,但是我想知道是否有列表或某种方法可以找到它,再加上从源代码推断可能会引起问题。原因是捕获异常,以便我可以记录它们并适当地通知用户。那么,如何才能准确地找出抛出了哪些异常?我应该这样做还是捕获DataAccessException并记录其消息就足够了?

1 个答案:

答案 0 :(得分:1)

您可以捕获父异常,并使用原始代码或实用程序库之一来获取异常的根本原因。 下面的原始代码示例是从catch块调用的。 异常的根本原因和消息应始终记录。通常将一个通用的异常处理程序集中化,以便仅在一个地方记录异常(例如在Spring应用程序中,我们使用 @ControllerAdvice

private static Throwable findSpecificCause(Throwable throwable) {
        Throwable rootCause = getRootCause(throwable);
        return (rootCause != null ? rootCause : throwable);
    }

private static Throwable getRootCause(Throwable throwable) {
        if (throwable == null) {
            return null;
        }
        Throwable rootCause = null;
        Throwable cause = throwable.getCause();
        while (cause != null && cause != rootCause) {
            rootCause = cause;
            cause = cause.getCause();
        }
        return rootCause;
    }

您还可以考虑使用类似Apache的通用lang ExceptionUtils,Spring NestedExceptionUtils或Guava中的库

另请参阅链接:Exception Root Cause