Что такое соединение в JDBC? - PullRequest
7 голосов
/ 08 мая 2009

Что такое объект соединения в JDBC? Как поддерживается это соединение (я имею в виду сетевое соединение)? Это соединения TCP / IP? Почему создание соединения всегда является дорогостоящей операцией? Почему через некоторое время эти соединения устаревают, и мне нужно обновить пул? Почему я не могу использовать одно соединение для выполнения нескольких запросов?

Ответы [ 4 ]

7 голосов
/ 08 мая 2009

Эти соединения являются соединениями TCP / IP. Чтобы не приходилось тратить время на создание каждого нового соединения, существуют пулы соединений, которые динамически расширяются и сжимаются. Вы можете использовать одно соединение для нескольких запросов. Я думаю, что вы имеете в виду, что вы выпустили его в бассейн. Если вы сделаете это, вы можете получить то же соединение из пула. В этом случае просто не имеет значения, выполняете ли вы один или несколько запросов

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

2 голосов
/ 08 мая 2009

Чтобы добавить к другим ответам:

Да, вы можете повторно использовать одно и то же соединение для нескольких запросов. Это даже целесообразно, так как создание нового соединения довольно дорого.

Вы даже можете выполнять несколько запросов одновременно. Вам просто нужно использовать новый экземпляр java.sql.Statement / PreparedStatement для каждого запроса. Операторы - это то, что JDBC использует для отслеживания текущих запросов, поэтому для каждого параллельного запроса требуется свой собственный оператор. Вы можете и должны повторно использовать операторы для последовательных запросов.

0 голосов
/ 08 мая 2009

, поскольку я пока не могу комментировать, отправлю ответ только для того, чтобы прокомментировать ответ Vinegar, ситуация с возвращением setAutoCommit () в состояние по умолчанию при возвращении соединения в пул не является обязательным поведением и не должна восприниматься как должное, также как закрытие операторов и наборы результатов; Вы можете прочитать, что он должен быть закрыт, но если вы не закроете их, они будут автоматически закрыты при закрытии соединения. Не принимайте это как должное, так как это займет ваши ресурсы в некоторых версиях драйверов jdbc.

У нас были серьезные проблемы с базой данных DB2 на AS400, ребята, которым требовалась изоляция транзакций, вызывали connection.setAutoCommit (false), и после завершения работы они возвращали такое соединение с пулом (JNDI) без connection.setAutoCommit (old_state), поэтому, когда другой поток получил это соединение из пула, вставки и обновления не зафиксированы, и никто не мог понять, почему долго ...

0 голосов
/ 08 мая 2009

Ответы на ваши вопросы в том, что они определены реализацией. Соединение JDBC - это интерфейс, который предоставляет методы. То, что происходит за кулисами, может быть чем угодно, что обеспечивает интерфейс. Например, рассмотрим внутренний драйвер JDBC Oracle, используемый для поддержки хранимых процедур Java. Одновременные запросы не только возможны, они более или менее неизбежны, поскольку каждый запрос нового соединения возвращает один-единственный объект соединения. Я точно не знаю, использует ли он TCP / IP внутри, но сомневаюсь.

Таким образом, вы не должны принимать подробности реализации, не зная точно, какую реализацию JDBC вы используете.

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