Закрытие ресурсов JDBC - PullRequest
       35

Закрытие ресурсов JDBC

3 голосов
/ 08 сентября 2011

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

Поправь меня, если я ошибаюсь, но я почти уверен, что оба работают?

Однако произойдет ли сбой базы данных, если я не закрою оператор после каждого запроса и затем выполню много запросов?

С другой стороны, будет ли неэффективным и бесполезным тратить время на закрытие и создание операторов для каждого запроса?

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

Тр.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

С http://www.precisejava.com/javaperf/j2ee/JDBC.htm#JDBC118:

Закрыть ResultSet по окончании

Закрыть объект ResultSet, как только вы закончите работу с объектом ResultSet, даже если объект Statement закрываетОбъект ResultSet неявно при закрытии, закрытие ResultSet явно дает возможность сборщику мусора вспомнить память как можно раньше, потому что объект ResultSet может занимать много памяти в зависимости от запроса.

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

0 голосов
/ 08 сентября 2011

Насколько это важно, зависит от того, что вы делаете. Но обычно лучше закрыть набор результатов (в блоке finally). Из всего, что я всегда читал и видел, открытие соединения само по себе является причиной снижения производительности.

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

...