我在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”中的路径...
与该系统属性无关。 Java6(和JDBC4)引入了一种称为“ service provider”的概念,在该概念中,JVM在启动期间可以检测到已知接口的实现。与之兼容的驱动程序将由DriverManager自动注册。这就是不再需要Class.forName()
的原因-仅在驱动程序支持的情况下。]
如果驱动程序的jar文件在META-INF目录内有services
目录,则将启动服务注册。该目录需要包含一个文本文件,该文件的名称是在java.sql.Driver
包含实现类的JDBC驱动程序的情况下实现的接口的名称。
摘自DriverManager
的Javadocs: