引用JDBC 规范,第 9 章,第 2 节:
JDBC 驱动程序必须实现 Driver 接口,并且该实现必须包含一个静态初始化程序,该初始化程序将在驱动程序加载时被调用。这个初始化器向 DriverManager 注册一个新的自身实例。
并提供了一个示例代码AcmeJdbcDriver
如下:
public class AcmeJdbcDriver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(newAcmeJdbcDriver());
}
}
根据 API 文档,当您调用Class.forName(String className)时,会发生以下情况:
调用 forName("X") 会导致初始化名为 X 的类。
其中初始化涉及要执行的静态块中的代码。
因此,基本上,您初始化 Driver 类,然后该类java.sql.DriverManager
按照 JDBC 规范注册自己。
请注意,这不再需要。详细信息可以在这里找到。
DriverManager 方法 getConnection 和 getDrivers 已得到增强,以支持 Java 标准版服务提供者机制。JDBC 4.0 驱动程序必须包含文件 META-INF/services/java.sql.Driver。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件将包含以下条目:
my.sql.Driver
应用程序不再需要使用 Class.forName() 显式加载 JDBC 驱动程序。