2017-08-14 101 views
0

我有一个非常简单的Java得到使用H2内存数据库开始应用:为什么JDBC驱动程序不需要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_DRIVER);?在所有H2快速入门中,他们都会手动加载课程。

回答

2

对于任何不多年的JDBC驱动程序,您都不需要这样做。驱动程序是自动发现由于Java的,as documented的服务提供商机制:

类DriverManager方法的getConnection和getDrivers已得到增强,支持Java标准版服务提供商的机制。 JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver。该文件包含java.sql.Driver的JDBC驱动程序实现的名称。例如,加载my.sql.Driver类中,META-INF /服务/ java.sql.Driver文件需要包含下面的条目:

my.sql.Driver 

应用程序不再需要显式地加载使用类JDBC驱动程序。的forName()。当前使用Class.forName()加载JDBC驱动程序的程序将继续工作而不进行修改。

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

+0

啊,这很有道理,谢谢。是的,我认为驱动程序是自动加载的,但在H2网站上找不到它;我的头衔措辞不佳。 – pydoge