我使用的是德比作为一个嵌入的数据库。此外,我使用的是它的内存数据库的选择为我的单元的测试。

什么我想不出是如何正确地关闭 (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

其他提示

URL"jdbc:德比:存储器:嗯;关机=true"的结果在预期08006错误代码,但实际上并不消除该数据库从存储器。如果后来,试图创建一个新的数据库与"jdbc:德比:存储器:嗯;创建=true",你会得到一个错误的说,数据库已经存在。

幸运的是,作为德比10.6.1.0(发布关于可17 2010年),它可能实际上下降一个存储器数据库使用网址的形式"jdbc:德比:存储器:嗯;=true"。看看 释放笔记 和网页 使用的存储器数据库.

我相信,你的第一个代码示例是好的。在SQL状态差,你所看到的,我相信,是因为你正在运行Derby嵌入式,但示例代码,你看到(带SQL状态XJ015)是在客户端 - 服务器配置中运行。

如你所指出的,SQLNonTransientConnectionException是的SQLException的子类,所以我很困惑,为什么你认为你没有得到正确的异常类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top