如何正确关闭Derby内存数据库

Fra*_*k V 15 java shutdown derby in-memory-database

我正在使用derby作为嵌入式数据库.此外,我正在使用它的内存数据库选项进行单元测试.

我无法弄清楚的是如何正确关闭(快速查看代码) Derby数据库.我相信我让它适用于标准数据库但我在内存数据库中尝试类似代码时会遇到不同的异常.

我将省略细节,如果需要其他感觉,我会添加它们.

基本上,我试图在这两种方式中关闭我的数据库,我的内存数据库一直被称为"呃":

DriverManager.getConnection("jdbc:derby:memory:eh;shutdown=true");
Run Code Online (Sandbox Code Playgroud)

然后:

DriverManager.getConnection("jdbc:derby:eh;shutdown=true");
Run Code Online (Sandbox Code Playgroud)

前者导致异常但不是预期的异常.细节是:

java.sql.SQLNonTransientConnectionException:数据库'内存:呃'关闭.

后者导致

java.sql.SQLException:找不到数据库'呃'.

根据我能够弄清楚的,我们想要一个SQLException但不是我们收到的那个.另一方面,SQLNonTransientConnectionException错误似乎更合适,但不是正确的类型(虽然它是派生的SQLException),也没有正确的状态代码.州代码最终是:08006.

我的示例代码说明了SQLException一个SQL状态为"XJ015"的代码.

注意:我引用的示例是:WwdEmbedded Program(Java Code).

小智 20

XJ015(带SQLCODE50000)是SQLSTATE完成系统关闭的预期(成功).SQLCODE另一方面,08006(45000)是SQLSTATE仅关闭单个数据库的预期.

DriverManager.getConnection("jdbc:derby:;shutdown=true");
Run Code Online (Sandbox Code Playgroud)

关闭整个系统,应该导致XJ015.


Mat*_*ell 12

URL"jdbc:derby:memory:eh; shutdown = true"导致预期的08006错误代码,但实际上并未从内存中删除DB.如果稍后,您尝试使用"jdbc:derby:memory:eh; create = true"创建新数据库,则会收到错误消息,指出数据库已存在.

幸运的是,从Derby 10.6.1.0(2010年5月17日发布)开始,可以使用"jdbc:derby:memory:eh; drop = true"形式的URL实际删除内存数据库.请参阅发行说明使用内存数据库的页面.