Quick Swing: нужно закрыть мою базу данных при закрытии - PullRequest
1 голос
/ 30 марта 2009

Я создавал тестовое приложение, которое работает с базой данных, которая до недавнего времени не имела пользовательского интерфейса. Я добавляю один сейчас. Проблема в том, что JFrame запускается в другом потоке, и мне нужно, чтобы мое соединение с базой данных закрывалось, когда этот поток закрывался (при закрытии интерфейса, я должен сказать) Как мне это сделать?

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

Ответы [ 2 ]

4 голосов
/ 30 марта 2009

Вы можете добавить отключающий хук к вашей среде выполнения. Это поток, который будет запущен при закрытии виртуальной машины. В потоке вы можете закрыть все соединения БД и другие важные ресурсы.

3 голосов
/ 30 марта 2009
  1. WindowClosingEvent будет запущено, если пользователь попытается закрыть ваш JFrame. Таким образом, в этом методе вы можете закрыть ваше соединение.
  2. Ваша СУБД использует пул соединений. Если вы не закроете свои соединения должным образом, этот пул соединений заполнен неиспользуемым соединением.
    Плохо, если пул полон и требуется новое соединение. Приложение не будет работать. Либо пользователь ждет и пытается сделать это еще раз (пока он ожидает, одно соединение может быть закрыто или прервано), либо база данных перезапускается вручную, поэтому все соединения теряются.
    СУБД закрывает все неиспользуемые соединения по истечении заданного времени. Какой параметр указывает это время, вы найдете его в руководстве по вашей СУБД.

В дополнение к вашему комментарию: Вы не можете гарантировать, что у вас есть достаточно времени для очистки ваших соединений. Возможно, ваше приложение уничтожено вашей системой или чем-то еще. Итак: Попробуйте очистить соединение как можно скорее.
Неиспользуемые соединения могут быть удалены СУБД только после того, как вы потеряли объект соединения.

...