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

2022-09-03 04:34:10

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

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

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

基本上,我正在尝试以这两种方式关闭我的数据库,其中我的内存数据库始终称为“eh”:

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

然后:

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

前者导致异常,但不是预期的异常。详细信息如下:

java.sql.SQLNonTransientConnectionException: Database 'memory:eh' shutdown.

后者导致

java.sql.SQLException: 未找到数据库 'eh' 。

根据我能够弄清楚的情况,我们想要一个,但不是我们收到的那个。另一方面,错误似乎更合适,但不是正确的类型(尽管它是从 )也不是正确的状态代码。状态代码最终为:。SQLExceptionSQLNonTransientConnectionExceptionSQLException08006

我的示例代码说明了一个 SQL 状态为“XJ015”的代码。SQLException

注意:我引用的例子是:WwdEmbedded ProgramJava Code)。


答案 1

XJ015(带50000)是系统完全关机的预期(成功)。另一方面,08006(带 45000)是仅关闭单个数据库的预期值。SQLCODESQLSTATESQLCODESQLSTATE

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

关闭整个系统,并导致 。XJ015


答案 2

URL “jdbc:derby:memory:eh;shutdown=true”会导致预期的 08006 错误代码,但实际上并没有从内存中删除数据库。如果稍后,您尝试使用“jdbc:derby:memory:eh;create=true”创建一个新数据库,您将收到一个错误,指出该数据库已经存在。

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


推荐