2013-08-19 4 views
1

Если я явно закрываю соединение, вызвав функцию close() для объекта подключения, я установил объект соединения в null. В чем разница в методе close() и null на объекте соединения? Если я закрываю соединение, все еще объект подключения поддерживается в пуле соединений? , например.Разница между соединением.close() и connection = null

Connection dbConnection=null; 
PreparedStatement preparedStatement = null; 
ResultSet rs; 
    try { 
      Connection dbConnection= DriverManager.getConnection("jdbc:hsqldb:file:test5","sa", ""); 
      ........... 
      ........... 
      dbConnection.close(); 
      dbConnection=null; 
      } catch (Exception e) { 
     LOGGER.error("Exception Occured while fetching All record:Item details start method " 
       + e.getMessage()); 
    } finally { 

     try 
     { 
      if (rs!=null) 
      { 
       rs.close(); 
       rs=null; 
      } 

     } 
     catch(SQLException e) 
     { 
      LOGGER.error(RESULTSETCLOSEEXCEPTION 
        + e.getMessage()); 
     } 

     try { 
      if (preparedStatement != null) { 
       preparedStatement.close(); 
       preparedStatement=null; 
      } 
     } catch (SQLException e) { 
      LOGGER.error(STATEMENTCLOSEEXCEPTION 
        + e.getMessage()); 
     } 
     try { 
      if (dbConnection != null) { 
       dbConnection.close(); 
       dbConnection=null; 
      } 
     } catch (SQLException e) { 
      LOGGER.error(CONNECTIONCLOSEEXCEPTION 
        + e.getMessage()); 
     } 
    } 

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

ответ

2

Замыкает соединение, устанавливает связь соединения с нулем.

Если вы не закрываете соединение, может возникнуть утечка соединения. Важно закрыть соединение в блоке finally.

операция закрытия() закрывает connection-- он не делает ничего для ссылки подключения. Возможно, у вас не будет do что-нибудь с соединением, но оно не равно нулю. Как только он будет закрыт, он может быть выпущен обратно в коллекционный пул, но это снова что-то другое.

Заключение :: * connection.close() * это закрыть СВЯЗЬ с базой данных и освободить все ресурсы. ***con = null*** - ссылка на объект соединения удаляется в этом случае, если соединение открыто, то оно все еще открыто, то есть ресурсы не являются бесплатными.

Позвольте мне исправить, если я ошибаюсь.

+1

Когда вы используете пул соединений, соединение, которое вы получаете, является прокси-сервером или оберткой. Вызов 'close()' сигнализирует пулу, что соединение должно быть возвращено в пул; он не закрывает физическое соединение, но прокси-сервер будет вести себя так, как будто соединение было закрыто. –

3

Из документации.

close() 
Releases this Connection object's database and JDBC resources immediately instead of 
waiting for them to be automatically released. 
1

с помощью Connection.close() мы можем закрыть ресурс, и мы можем повторно использовать соединение, потому что вернуться назад и сохраняется в пуле соединений

и

делая Connection connection = null него смысл, мы свободны от соединения ресурс, в этом нет утечки в управлении памятью, но мы не можем его повторно использовать.