Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > JDBC connection


Автор: GShadrin 4.12.2011, 12:39
Добрый день.

Возникло несколько вопросов по JDBC.
После загрузки необходимого драйвера мы можем получить connection к базе данных, используя который может выполнять запросы к бд. DriverManager предоставляет статический метод getConnection, который возвращает connection, принимая на вход параметры. Мое приложение в течении своего жизненного цикла будет постоянно взаимодействовать с субд.  На мой взгляд разумно держать постоянно (по возможности) открытым подключение.
Вопросы: 
  • что происходит когда я вызываю DriverManager.getConnection? Происходит подключение? Сколько оно держится? Пока не вызову close?
  • если я еще раз вызываю  DriverManager.getConnection выполняется подключение заново и создание нового объекта или мне вернут ссылку на тот же объект, что и при первом вызове?
  • имеет ли смысл держать в состоянии контроллера connection и если он не нулл и не isClossed использовать его, не вызывая DriverManager.getConnection?
  • что происходит при потери соединения?

Спасибо за любую помощь.

Автор: jk1 4.12.2011, 12:55
Цитата

что происходит когда я вызываю DriverManager.getConnection? Происходит подключение? Сколько оно держится? Пока не вызову close?

Открывается физическое соединение с базой. Оно будет активно до тех пор, пока не вызван close(). Если close() не вызвать совсем, то соединение отвалится по тайауту со стороны базы, но произойдет это нескоро.

Цитата

если я еще раз вызываю  DriverManager.getConnection выполняется подключение заново и создание нового объекта или мне вернут ссылку на тот же объект, что и при первом вызове?

Вернется новый объект Connection, за которым будет лежать новое соединение с СУБД

Цитата

имеет ли смысл держать в состоянии контроллера connection и если он не нулл и не isClossed использовать его, не вызывая DriverManager.getConnection?

Ни в коем случае. Для веб-приложений надо использовать пул соединений и брать соединения из него. http://en.wikipedia.org/wiki/Connection_pool

Цитата

что происходит при потери соединения?

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

Автор: GShadrin 4.12.2011, 13:19
Большое спасибо за ответы.

Цитата

Цитата

имеет ли смысл держать в состоянии контроллера connection и если он не нулл и не isClossed использовать его, не вызывая DriverManager.getConnection?

Ни в коем случае. Для веб-приложений надо использовать пул соединений и брать соединения из него. Что это?


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

Автор: AntonSaburov 5.12.2011, 17:41
Тут тоже можно прочитать про пул коннектов - http://java-course.ru/students/students.php?name=part9

Автор: GShadrin 5.12.2011, 18:22
Спасибо за ссылки.
Нашел интересную статью на сайте джавы про то как организовать пул, в том числе делают проверку активности соединений. http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html

Попробую привернуть к проекту.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)