JDBC版本4的一项重大新增功能您不必再通过调用来显式加载驱动程序Class.forName。当您的应用程序首次尝试连接数据库时,将DriverManager自动加载在应用程序中找到的驱动程序CLASSPATH。
Class.forName
DriverManager
CLASSPATH
我的问题是? 如果类路径中有多个驱动程序怎么办?
我可以猜测的一件事是,在解析连接URL时,可以算出所需的驱动程序是JDBC还是ODBC,但是如何从多个与jdbc兼容的驱动程序中说出要为我正在使用的数据库选择哪个呢?(可以说我正在使用MySql,并且需要MySql- Connector驱动程序)。JVM中是否有此类数据库驱动程序的静态映射?
有关JDBC4驱动程序加载的一些信息来自:http ://www.onjava.com/2006/08/02/jjdbc-4-enhancements-in-java- se-6.html
调用方法getConnection时,DriverManager将尝试从初始化时加载的JDBC驱动程序和使用与当前应用程序相同的类加载器显式加载的JDBC驱动程序中查找合适的驱动程序。 对DriverManager方法getConnection和getDrivers进行了增强,以支持Java SE服务提供程序机制(SPM)。根据SPM,服务被定义为一组众所周知的接口和抽象类,而服务提供者是该服务的特定实现。它还指定服务提供者配置文件存储在META- INF / services目录中。JDBC 4.0驱动程序必须包含文件META-INF / services / java.sql.Driver。该文件包含JDBC驱动程序的java.sql.Driver实现的名称。例如,要加载JDBC驱动程序以连接到Apache Derby数据库,META-INF / services / java.sql.Driver文件将包含以下条目:
调用方法getConnection时,DriverManager将尝试从初始化时加载的JDBC驱动程序和使用与当前应用程序相同的类加载器显式加载的JDBC驱动程序中查找合适的驱动程序。
对DriverManager方法getConnection和getDrivers进行了增强,以支持Java SE服务提供程序机制(SPM)。根据SPM,服务被定义为一组众所周知的接口和抽象类,而服务提供者是该服务的特定实现。它还指定服务提供者配置文件存储在META- INF / services目录中。JDBC 4.0驱动程序必须包含文件META-INF / services / java.sql.Driver。该文件包含JDBC驱动程序的java.sql.Driver实现的名称。例如,要加载JDBC驱动程序以连接到Apache Derby数据库,META-INF / services / java.sql.Driver文件将包含以下条目:
org.apache.derby.jdbc.EmbeddedDriver
现在来问你的问题。
我的问题是?如果类路径中有多个驱动程序怎么办?
作为类加载器规则,将首先加载找到的所有类,如果该类已经加载,则不会由类加载器重新加载。