我使用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快速启动中,他们手动加载类。
答案 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()加载它是不必要的。