想知道在以下情况中是否可能引发ClassNotFoundException
:
DriverManager.getConnection(...);
我知道在从JDBC 4.0开始手动加载驱动程序Class.forName(drivers..)
时可能会抛出它而不需要手动执行它,因为类DriverManager会自动完成这项工作。
我的问题是:当自动加载驱动程序时,如果找不到合适的驱动程序,它会抛出ClassNotFoundException
吗?我在DriverManager的API中看到它只抛出SQLException,它无论如何都与ClassNotFoundException无关。
这是否意味着它不会抛出它? 谢谢,
确实是它
答案 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中)。
或者你可以看看:
META-INF/services/java.sql.Driver
文件加载驱动程序) loadInitialDrivers
将忽略迭代ServiceLoader
迭代器返回的类时抛出的任何异常。
同样由于ClassNotFoundException
是一个已检查的异常且getConnection()
没有声明要抛出它,你应该知道它永远不能抛出该异常(除非包含在另一个异常中)。 / p>