0

它在这里指出:

https://jdbi.org/apidocs/org/jdbi/v3/core/JdbiException.html

JdbiExceptionBase unchecked exception for exceptions thrown from jdbi.

但是,如果我withHandle使用各种不同的回调调用该方法:

jdbi.withHandle(handle -> handle
            .createQuery("...")
            .mapTo(String.class)
            .one());  

文档声明它会抛出X extends Exception(而不是JdbiExecption像我预期的那样抛出)并将其描述为@param <X> exception type thrown by the callback, if any.

public <R, X extends Exception> R withHandle(HandleCallback<R, X> callback) throws X {

我想知道是否可以安全地打电话withHandle并抓住JdbiException,而不是不得不抓住Exception

try {
  jdbi.withHandle(handle -> ...);
} catch (JdbiException e) {
    // Will this catch everything thrown from `withHandle`?
}

4

1 回答 1

1

重点X extends Exception是针对您的代码,而不是针对 JDBI 的代码。您自己编写的代码(在 之后->)可以抛出X.

JDBI 确实会抛出 JdbiExceptions,并且不会抛出其他任何东西。但是您的代码可能会抛出 IOException 或诸如此类的东西。

这有效:

try {
  jdbi.withHandle(handle -> throw new IOException());
} catch (IOException e) {}

为了使这项工作发挥作用,这<X extends Exception>就是一切。

于 2021-09-17T13:25:40.600 回答