Как завершить работу Derby база данных Properly в оперативной памяти

Я использую дерби в качестве встроенной базы данных. Кроме того, я использую, это - параметр базы данных в оперативной памяти для моих модульных тестов.

То, что я не могу выяснить, - то, как правильно закрыть (Беглый взгляд на код) базу данных Derby. Я полагаю, что у меня есть он работающий на стандартную базу данных, но я получаю различные исключения когда попытка подобный код базы данных в оперативной памяти.

Я собираюсь опустить детали, я добавлю их, если другое чувство будет необходимо.

В основном я пытаюсь закрыть свою базу данных этими двумя способами, где мою базу данных в оперативной памяти последовательно называют "а":

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

затем:

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

Бывшие результаты в исключении, но не том ожидаются. Детали:

java.sql. SQLNonTransientConnectionException: База данных 'memory:eh' завершение работы.

Последние результаты в

java.sql. SQLException: База данных, 'а' не найденная.

На основе того, что я смог выяснить, мы хотим a SQLException но не тот мы получаем. С другой стороны, SQLNonTransientConnectionException ошибка кажется более соответствующей, но не является правильным типом (хотя это получено из SQLException) и при этом это не имеет правильного кода состояния. Код состояния заканчивает тем, что был: 08006.

Пример кода, который я имею, иллюстрирует это a SQLException с состоянием SQL "XJ015".

Примечание: Пример, на который я ссылаюсь: Программа WwdEmbedded (Код Java).

15
задан bluish 8 March 2012 в 14:08
поделиться

3 ответа

XJ015 (с SQLCODE 50000) является ожидаемым (успешным) SQLSTATE для полного завершения работы системы. 08006 (с SQLCODE 45000), с другой стороны, является ожидаемым SQLSTATE для завершения работы только отдельной базы данных.

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

Завершает работу всей системы и должен привести к XJ015 .

20
ответ дан 1 December 2019 в 01:53
поделиться

Я считаю, что ваш первый пример кода подходит. Я полагаю, что разница в состоянии SQL, которую вы видите, заключается в том, что вы используете встроенный Derby, но пример кода, который вы видели (с состоянием SQL XJ015), выполнялся в конфигурации клиент-сервер.

Как вы заметили, SQLNonTransientConnectionException является подклассом SQLException, поэтому я не понимаю, почему вы думаете, что получаете неправильный тип исключения.

0
ответ дан 1 December 2019 в 01:53
поделиться

URL "jdbc:derby:memory:eh;shutdown=true" приводит к ожидаемому коду ошибки 08006, но фактически не удаляет БД из памяти. Если позже вы попытаетесь создать новую базу данных с помощью "jdbc:derby:memory:eh;create=true", вы получите ошибку о том, что база данных уже существует.

К счастью, начиная с версии Derby 10.6.1.0 (выпущенной 17 мая 2010 года), можно действительно уничтожить базу данных в памяти, используя URL вида "jdbc:derby:memory:eh;drop=true". См. release notes и страницу Using in-memory databases.

12
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: