Открытие соединения с базой данных в конструкторе, когда мне его закрыть?

ну, я думал о том, чтобы сделать запросы к базе данных немного быстрее, оставив соединение с базой данных открытым, пока объект используется. Поэтому я думал об открытии соединения в конструкторе этого класса. Теперь вопрос, как я могу закрыть соединение после того, как я перестал использовать? Я должен вызвать close () где-нибудь, не так ли? Я читал о методе finalize (), но люди, похоже, скептически относились к использованию этого метода где-либо вообще. Я ожидаю, что у него будет что-то вроде деструктора, но у Java его нет, так?

Так кто-нибудь может дать мне решение? Заранее спасибо.

 Piotr Praszmo29 мая 2012 г., 13:45
finalize полезен только в том случае, если вы хотите автоматически освобождать не-Java-ресурсы. Соединение с базой данных, скорее всего, уже переопределяетfinalize метод и закроется сам по себе. Закройте соединение вручную использования Это функция java7.
 Raedwald23 апр. 2015 г., 07:59
Возможный дубликат Есть ли деструктор для Java?

Ответы на вопрос(2)

Java.io.Closeable. В соответствии с этим интерфейсом вам придется реализоватьvoid close() throws IOException, который будут вызывать все клиенты класса, потому что закрывать @ - хорошая практиCloseable занятия после использования.

 gustafc29 мая 2012 г., 13:47
Как и в Java 7, есть AutoCloseable который вы можете использовать вместо этого, чтобы вы могли генерировать любое исключение, которое вам нравится, а не просто IOException.
Решение Вопроса

если приложение разрешит это. При пуле соединений будет создан пул соединений, который будет оставаться подключенным к базе данных. Затем ваше приложение получит открытое / неиспользуемое соединение из пула и использует его и вернет в пул.

Это позволит вам быстрее устанавливать соединения, и вам не придется слишком сильно изменять свои классы. Пул соединений с базой данных - отличный метод, если вам нужно масштабировать приложение.

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

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

 gustafc29 мая 2012 г., 14:02
+ 1 - пул соединений делает то, что хочет OP, просто в гораздо более контролируемом и стандартизированном виде.

Ваш ответ на вопрос