Начнем с того, что в документации Derby сказано:
Завершение работы Derby или отдельной базы данных
Приложения во встроенной среде закрывают систему Derby
указание атрибута shutdown = true в URL-адресе соединения. Закрыть
вниз по системе, вы не указываете имя базы данных, и вы не
обычно указывается любой другой атрибут.
jdbc:derby:;shutdown=true
Успешное завершение всегда приводит к исключению SQLEx
что Дерби закрылся и что нет другого исключения.
Если вы включили аутентификацию пользователя на системном уровне, вы
необходимо указать учетные данные (то есть имя пользователя и пароль) в порядке
завершить работу системы Derby, а также предоставленные имя пользователя и пароль
также должен быть определен на системном уровне.
и т. Д.
Ваши вопросы:
1) Зачем мне нужно активное соединение для отключения определенной базы данных?
Потому что так сказано в документации.
Потому что именно так они это реализовали.
Поскольку для закрытия базы данных (в общем случае) требуется пользователь
аутентификация и установление соединения - это место, где пользователь
аутентификация происходит.
2) Разве не имеет смысла закрыть соединение и затем отключить БД?
Учитывая последнее, нет.
3) Зачем мне закрывать соединение, если конкретная база данных закрыта?
Вам не нужно , если ваше приложение может справиться с потенциальной утечкой ресурсов; например сокеты, которые не могли быть закрыты на стороне клиента.
Но, безусловно, желательно, чтобы ваше приложение продолжало работу после завершения работы базы данных.
4) Почему я могу восстановить соединение после отключения определенной базы данных?
Предположительно, потому что он предназначен для этого.
5) Какова фактическая разница между выключением определенной базы данных и закрытием соединения?
(я не совсем уверен в этом ....)
Завершение работы базы данных сделает недействительными все соединения для конкретной базы данных. Он не закрывает их на стороне клиента, поэтому сокеты могут оставаться открытыми ... до тех пор, пока часть вашего приложения, использующая соответствующие коллекции, не попытается использовать их, не обнаружит, что они "мертвы", и не закроет их.
Напротив, закрытие соединения закрывает просто это соединение как на стороне сервера, так и на стороне клиента. Любые розетки должны быть немедленно закрыты.
ПРИМЕЧАНИЕ: использование дерби во встроенном режиме
Документация не делает различий для встроенного и не встроенного режима.