Java 为什么H2不需要JDBC驱动程序

Java 为什么H2不需要JDBC驱动程序,java,jdbc,connection,h2,Java,Jdbc,Connection,H2,我有一个非常简单的Java入门应用程序,使用H2内存数据库: String DB_URL = "jdbc:h2:./test"; try(Connection conn = DriverManager.getConnection(DB_URL,USER,PASS); Statement stmnt = conn.createStatement() ){ // executing SQLs, getting a result set, etc. ..

我有一个非常简单的Java入门应用程序,使用H2内存数据库:

String DB_URL = "jdbc:h2:./test";
try(Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
                Statement stmnt = conn.createStatement() ){
    // executing SQLs, getting a result set, etc.
    ...
}
// Catching & handling exceptions

这个应用程序可以工作,但是,我想知道为什么我不调用
Class.forName(JDBC_驱动程序)我的代码中的任何地方?在所有H2快速启动中,它们手动加载类

对于没有多少年历史的任何JDBC驱动程序,都不需要这样做。由于Java的服务提供者机制,驱动程序是自动发现的:

DriverManager方法getConnection和getDrivers已得到增强,以支持Java标准版服务提供程序机制。JDBC4.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驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续工作,无需修改


请注意,与问题的标题相反,JDBC驱动程序是必需的。使用Class.forName()加载它是不必要的。

对于任何不太老的JDBC驱动程序,您不需要这样做。由于Java的服务提供者机制,驱动程序是自动发现的:

DriverManager方法getConnection和getDrivers已得到增强,以支持Java标准版服务提供程序机制。JDBC4.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驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续工作,无需修改


请注意,与问题的标题相反,JDBC驱动程序是必需的。使用Class.forName()加载它是不必要的。

啊,这很有道理,谢谢。是的,我以为驱动程序是自动加载的,但在H2网站上找不到;我的标题措词不当。啊,这很有道理,谢谢。是的,我以为驱动程序是自动加载的,但在H2网站上找不到;我的标题措词不当。