2

想知道ClassNotFoundException在以下情况下是否可能会被抛出:

DriverManager.getConnection(...);

我知道从 JDBC 4.0 开始手动加载驱动程序时可能会被抛出,Class.forName(drivers..)因为类 DriverManager 会自动完成这项工作,因此无需手动执行。我的问题是:自动加载驱动程序时,如果没有找到正确的驱动程序,它会抛出ClassNotFoundException? 我在 DriverManager 的 API 中看到它只抛出 SQLException 并且无论如何它与 ClassNotFoundException 无关。

这是否意味着它不会扔它?谢谢,

它的确是

4

4 回答 4

1

它抛出的ClassNotFoundExceptionhttp不是 DriverManager.getConnection(...) 的 Class.forName 方法。请参阅名称文档。

还要确保您提供了完全限定的类名,因为 class.forName() 需要一个完全限定的类名

于 2013-09-22T07:39:16.613 回答
0

不,它不能扔ClassNotFoundException。使用 JDBC4,如果Driver未注册,您只会得到一个异常,指出该 url 不存在已注册的驱动程序。就像是

Exception in thread "main" java.sql.SQLException: No suitable driver found for <your url>
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at ru.expbrain.flib.Main.main(Main.java:15)

DriverManager.getConnection(String)状态的 javadoc

DriverManager 尝试从已注册的 JDBC 驱动程序集中选择合适的驱动程序。

于 2013-09-22T07:36:07.327 回答
0

它抛出 SQLException,类似于 java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test. 在 DriverManager.getConnection API 中有说明

Throws: SQLException - if a database access error occurs
于 2013-09-22T07:41:35.233 回答
0

您知道您可以查看源代码DriverManager以了解它如何Driver从类路径加载实现(源代码包含在 JDK 中)。

或者你可以看看:

loadInitialDrivers忽略迭代器返回的类时抛出的任何异常ServiceLoader

同样,作为ClassNotFoundException已检查异常并且getConnection()未声明抛出它,您应该知道它永远无法抛出该异常(除非包装在不同的异常中)。

于 2013-09-22T11:23:27.820 回答