使用DriverManger.getConnection抛出ClassNotFoundException?

时间:2013-09-22 07:31:06

标签: java jdbc classnotfoundexception

想知道在以下情况中是否可能引发ClassNotFoundException

DriverManager.getConnection(...);

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

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

确实是它

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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驱动程序集。

答案 2 :(得分: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

答案 3 :(得分:0)

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

或者你可以看看:

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

同样由于ClassNotFoundException是一个已检查的异常且getConnection()没有声明要抛出它,你应该知道它永远不能抛出该异常(除非包含在另一个异常中)。 / p>