Завершение сеанса на стороне сервера базы данных также закрывает соединение и делает объект соединения jdbc нулевым? - PullRequest
2 голосов
/ 17 ноября 2010

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

В этом случае, если сеанс блокировки был прерван на стороне базы данных, что произойдет с соответствующим соединением Javaобъект?Этот объект станет нулевым после предоставления исключения?Какое может быть поведение, если этот объект соединения используется позже в коде без установки проверок?

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

Каков будет ответ, если вышеуказанное соединение будет создано через источник данных, управляющий пулом соединений, а не через обычное соединение jdbc?

1 Ответ

2 голосов
/ 17 ноября 2010

Независимо от того, какие операции выполняются, будет выброшено SQLException, а любые вызовы метода Connection.isClosed() вернут true. Любые последующие попытки использовать объект подключения также выдают SQLException с ошибкой, указывающей, что соединение закрыто.

Это не установит для вашего объекта соединения значение null. Ничто не может сделать это, если вы не напишите явный код для установки объекта в null, если выброшено исключение или Connection.isClosed() возвращает true. Вы должны сделать это вручную.

...