怎么关闭德比在内存数据库的正确
-
22-09-2019 - |
题
我使用的是德比作为一个嵌入的数据库。此外,我使用的是它的内存数据库的选择为我的单元的测试。
什么我想不出是如何正确地关闭 (A快看码) 德比的数据库。我相信我拥有了它的工作的一个标准的数据库,但我越来越不同的例外时,试图代码类似于在存储器数据库。
我将省略细节,我会加入他们,如果其他人认为是必要的。
基本上,我想关闭我的数据库,在这两个时装在我的内存数据库是一贯被称为"嗯":
DriverManager.getConnection("jdbc:derby:memory:eh;shutdown=true");
然后:
DriverManager.getConnection("jdbc:derby:eh;shutdown=true");
前者的结果 一个例外而不是一个预期.详细信息是:
java。sql。SQLNonTransientConnectionException:数据库的存储器:嗯'关闭。
后者的结果
java。sql。SQLException:数据库'eh'没有找到。
根据我已经能够找出时,我们想要一个 SQLException
但不是一个我们接受。另一方面, SQLNonTransientConnectionException
错误似乎更为适当的但不是正确的类型(虽然它是从 SQLException
)也没有权状态的代码。国家代码最终是: 08006
.
例码我必须说明的是一个 SQLException
与SQL状态"XJ015".
注:例如,我引用: WwdEmbedded程序 (Java码).
解决方案
XJ015(与SQLCODE
50000)是对完整的系统停机的预期(成功)SQLSTATE
。 08006(与SQLCODE
45000),而另一方面,仅用于单个数据库的关闭预期SQLSTATE
。
DriverManager.getConnection("jdbc:derby:;shutdown=true");
关闭整个系统和应导致XJ015
。
其他提示
我相信,你的第一个代码示例是好的。在SQL状态差,你所看到的,我相信,是因为你正在运行Derby嵌入式,但示例代码,你看到(带SQL状态XJ015)是在客户端 - 服务器配置中运行。
如你所指出的,SQLNonTransientConnectionException是的SQLException的子类,所以我很困惑,为什么你认为你没有得到正确的异常类型。