2013-08-19 113 views
1

如果我通過在連接對象上調用close()來顯式關閉連接,我已經將連接對象設置爲null。連接對象上的close()和null有什麼區別? 如果我關閉連接,仍然在連接池中維護連接對象?例如對於例如 connection.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

一個關閉連接,一個將連接引用設置爲null。

如果您不關閉連接,則可能發生連接泄漏。在finally塊中關閉連接非常重要。

的密切()操作關閉connection-- 它不會做任何事情連接參考。您可能無法使用連接任何事情,但它不爲空。一旦它關閉,它可以被釋放回集合池中,但這又是一回事。

結論:: * connection.close()時 * 它關閉連接如與數據庫並釋放所有資源。 ***con = null*** - 在這種情況下,連接對象的引用將被刪除,如果連接處於打開狀態,則它仍然處於打開狀態,即資源不是空閒的。

讓我糾正,如果我錯了。通過使用Connection.close()

+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 connection = null這意義上,我們可以自由建立連接資源,由此在內存管理中沒有泄漏,但我們無法重用它。

相關問題