Derby EmbeddedDriver在没有Class.forName的情况下工作

时间:2017-01-07 09:21:35

标签: java derby

文档告诉我们像这样加载JDBC驱动程序

Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();

https://db.apache.org/derby/papers/DerbyTut/embedded_intro.html

但是没有并且立即获得连接它可以正常工作

connection = DriverManager.getConnection("jdbc:derby:" + pathDerby + ";create=true");

为什么?

日志版本:引导Derby版本Apache Software Foundation - Apache Derby - 10.13.1.1 - (1765088)

编辑:

实际上,如果您关闭Derby引擎并希望在同一个JWM进程中再次打开它(我在集成测试中一直这样做),则需要它。

关闭后

DriverManager.getConnection("jdbc:derby:;shutdown=true");

你应该像这样重新打开

Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
connection = DriverManager.getConnection("jdbc:derby:" + pathDerby + ";create=true");

1 个答案:

答案 0 :(得分:2)

来自official documentation

  

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驱动程序的现有程序将继续工作而无需修改。