是否所有异常都从 JdbiException 类型的 Jdbi 抛出?

Are all exceptions throw from Jdbi of type JdbiException?

这里说:

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

JdbiException 就是 Base 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`?
}

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

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

这个有效:

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

要做到这一点,这就是 <X extends Exception> 的意义所在。