У меня есть плагин bukkit (minecraft), который требует подключения к базе данных.
Извините вопрос о noob, но должно ли соединение базы данных оставаться открытым все время или открываться и закрываться при необходимости?
У меня есть плагин bukkit (minecraft), который требует подключения к базе данных.
Извините вопрос о noob, но должно ли соединение базы данных оставаться открытым все время или открываться и закрываться при необходимости?
Соединение с базой данных должно быть открыто только тогда, когда оно необходимо и закрыто после выполнения всей необходимой работы с ним. Пример кода:
До Java 7:
Connection con = null;
try {
con = ... //retrieve the database connection
//do your work...
} catch (SQLException e) {
//handle the exception
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException shouldNotHandleMe) {
//...
}
}
Java 7:
try (Connection con = ...) {
} catch (SQLException e) {
}
//no need to call Connection#close since now Connection interface extends Autocloseable
Но поскольку ручное открытие соединения с базой данных слишком дорого, настоятельно рекомендуется использовать пул соединений с базой данных. Это будет связано с физическими подключениями к базе данных для вас, и когда вы закроете его (то есть вызовите Connection#close
), физическое соединение с базой данных будет только в режиме SLEEP и все еще будет открытым.
Связанный Q/A:
Некоторые инструменты для обработки пула соединений с базой данных:
В зависимости от ваших потребностей.
Создание соединения занимает некоторое время, поэтому, если вам нужно часто обращаться к базе данных, лучше сохранить соединение открытым. Также лучше создать пул, чтобы многие пользователи могли одновременно получать доступ к базе данных (если это необходимо).
Если вам нужно использовать это соединение только несколько раз, вы можете не открывать его, но у вас будет задержка, если вы хотите получить доступ к базе данных. Поэтому я предлагаю вам создать таймер, который будет поддерживать соединение в течение некоторого времени (время ожидания соединения).
Собственно, все зависит от того, как вы пишете свое приложение! Это искусство, но, к сожалению, каждый человек берет учебник для хорошей практики, такой как учебники Microsoft.
Если вы знаете, что кодируете, то вы держите свое соединение открытым на всю жизнь приложения. Это просто, не потому, что утром вы должны работать, чтобы каждый день мы строили специальный маршрут именно для вас! Вы берете тот единственный маршрут или 2 или 4, как все! Вы судите о трафике и строите по 2, 4 или 6 маршрутов по мере необходимости. Если есть трафик с этими 4 или 6 маршрутами, вы ждете!
Счастливое кодирование.
Вам нужно закрыть свои соединения после выполнения каждого запроса. Иногда вам нужно выполнить несколько запросов одновременно, потому что запросы висят друг от друга. Такие, как "первая задача вставки, а затем назначить ее сотрудникам". время выполнения ваших запросов в той же транзакции и фиксации, если возникнут некоторые ошибки, а затем откат. Автосохранение по умолчанию отключено в JDBC. Пример
Использовать пул соединений. Если вы разрабатываете веб-приложение, то используйте пул соединений с сервером приложений. Сервер APP будет использовать один и тот же пул для каждого из ваших приложений, чтобы вы могли контролировать количество подключений с одной точки. В первую очередь рекомендуем Apache Tomcat Connection объединение Пример
В качестве дополнительной информации: Connection, Statement и ResultSet.
1.Если вы закрываете соединение, вам не нужно закрывать оператор или результат. Оба из них будут автоматически закрыты.
2.Если вы закроете Statement, он закроет ResultSet также
3.если вы используете try-with-resources следующим образом:
try (Connection con = ...) {
} catch (SQLException e) {
}
он автоматически закроет соединение. Поскольку try-with-resources требуют автозаблокируемых объектов, а Connection является автоклибируемым. Вы можете увидеть подробности о try-with-resources здесь
Подключение должно быть открыто только при необходимости. Если он открыт до фактической необходимости, он уменьшает одно активное соединение из пула соединений, поэтому он в конечном итоге воздействует на пользователей приложения.
Итак, всегда лучше открывать соединение только тогда, когда это необходимо, и закрывать его после завершения процесса.
Всегда пытайтесь подключить логику закрытия соединения в блоке finally, которая гарантирует, что ваше соединение будет закрыто, даже если в приложении есть какое-либо исключение
finally
{
connection.close()
}
Каждый раз, когда вы подключаетесь, у вас есть задержка, теперь представьте, что произойдет, если вы всегда подключаетесь и закрываете