13 янв. 2014 г., 07:48 от Jonathan LefflerArturas M

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

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

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

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

29 мая 2012 г., 10:35 от yegor256

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

29 мая 2012 г., 10:40 от Namphibian

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

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

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

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

ВАШ ОТВЕТ НА ВОПРОС