Java ClassNotFoundException与DriverManager.getConnection一起引发?
想知道在以下场景中是否可能抛出Java ClassNotFoundException与DriverManager.getConnection一起引发?,java,jdbc,classnotfoundexception,Java,Jdbc,Classnotfoundexception,想知道在以下场景中是否可能抛出ClassNotFoundException: DriverManager.getConnection(...); 我知道手动加载驱动程序Class.forName(drivers..)时可能会抛出它。另一方面,从JDBC 4.0开始,不需要手动执行,因为类驱动程序管理器会自动执行此任务。 我的问题是:当自动加载驱动程序时,如果没有找到正确的驱动程序,它是否会抛出ClassNotFoundException?我在DriverManager的API中看到,它只抛出S
ClassNotFoundException
:
DriverManager.getConnection(...);
我知道手动加载驱动程序Class.forName(drivers..)
时可能会抛出它。另一方面,从JDBC 4.0开始,不需要手动执行,因为类驱动程序管理器会自动执行此任务。
我的问题是:当自动加载驱动程序时,如果没有找到正确的驱动程序,它是否会抛出ClassNotFoundException
?我在DriverManager的API中看到,它只抛出SQLException,与ClassNotFoundException没有任何关系
这意味着它不会扔吗?
谢谢
确实是不,它不能抛出
ClassNotFoundException
。对于JDBC4,如果驱动程序未注册,您将得到一个异常,表明该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)
线程“main”java.sql.SQLException中的异常:找不到适合的驱动程序
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
位于ru.expbrain.flib.Main.Main(Main.java:15)
DriverManager.getConnection(字符串)
的javadoc声明
DriverManager尝试从中选择适当的驱动程序
一组注册的JDBC驱动程序
它是抛出
ClassNotFoundExceptionhttp
而不是DriverManager.getConnection(…)的Class.forName方法。见文件
另外,请确保您提供了完全限定的类名作为class。forName()需要一个完全限定的类名它会引发SQLException,类似于
java.sql.SQLException:找不到适合jdbc的驱动程序:mysql://localhost:3306/test
。它在DriverManager.getConnection API中声明
Throws: SQLException - if a database access error occurs
您知道,您可以查看
DriverManager
的源代码,查看它如何从类路径加载Driver
实现(源代码包含在JDK中)
或者您可以查看:
- (创建连接)
- (从类路径中的
文件加载驱动程序)META-INF/services/java.sql.Driver
loadInitialDrivers
将忽略迭代ServiceLoader
迭代器返回的类时引发的任何异常
另外,由于ClassNotFoundException
是一个选中的异常,并且getConnection()
没有声明抛出该异常,因此您应该知道它永远无法抛出该异常(除非包装在不同的异常中)