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

时间:2017-08-14 17:10:40

标签: java jdbc connection h2

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

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_DRIVER);?在所有H2快速启动中,他们手动加载类。

1 个答案:

答案 0 :(得分:2)

对于任何不多年的JDBC驱动程序,您都不需要这样做。借助Java的服务提供程序机制as documented

,可以自动发现驱动程序
  

DriverManager方法getConnection和getDrivers已得到增强,可支持Java Standard Edition Service Provider机制。 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驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续工作而无需修改。

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