Class.forName(JDBC_DRIVER)不再需要?

问题描述 投票:7回答:2

我在SO上已经读到,自Java 6开始,您不再需要使用以下方式注册JDBC驱动程序:

Class.forName(JDBC_DRIVER);

因为DriverManager使用位于系统属性“ jdbc.drivers”]中的路径检索正确的驱动程序。

但是当我执行以下操作时:

System.out.print(System.getProperty("jdbc.drivers"));

[null被打印。

您是否知道我的应用正常运行的原因? ;)

我在SO上已经读到,从Java 6开始,您不再需要使用以下类来注册JDBC驱动程序:Class.forName(JDBC_DRIVER);因为DriverManager使用位于系统属性“ jdbc.drivers”中的路径...

java sql jdbc
2个回答
12
投票

与该系统属性无关。 Java6(和JDBC4)引入了一种称为“ service provider”的概念,在该概念中,JVM在启动期间可以检测到已知接口的实现。与之兼容的驱动程序将由DriverManager自动注册。这就是不再需要Class.forName()的原因-仅在驱动程序支持的情况下。]

如果驱动程序的jar文件在META-INF目录内有services目录,则将启动服务注册。该目录需要包含一个文本文件,该文件的名称是在java.sql.Driver包含实现类的JDBC驱动程序的情况下实现的接口的名称。


2
投票

摘自DriverManager的Javadocs:

© www.soinside.com 2019 - 2024. All rights reserved.