gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:47:57 25 4
gpt4 key购买 nike

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

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

最佳答案

您可以捕获父异常并使用原始代码或实用程序库之一来找到异常的根本原因。下面的原始代码示例,从 catch block 调用。应始终记录异常和消息的根本原因。通常有一个集中的通用异常处理程序,仅在一个地方记录异常(例如在 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

关于java - JdbcTemplate.execute() 方法可以抛出的所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56521580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com