2012-04-06 59 views
7

在關閉java中的數據庫連接之後,我可以重新打開它嗎?或者我需要再次做DriverManager.getConnection()在Java中重新打開數據庫連接

+4

有什麼這麼難嘗試? – 2012-04-06 13:21:22

+0

你還看到Connection上的任何打開方法嗎? – MrJames 2012-04-06 13:28:52

+0

我沒有看到任何連接中的打開方法。那麼我該如何嘗試呢?調用'getConnection'將會起作用,嘗試它,但它是「正確」的方式嗎? – 2012-04-06 14:25:10

回答

4

我不是100%確定您需要需要致電DriverManager.getConnection()但是有什麼危害?您已經關閉了連接,只需在需要時連接一個新連接即可。垃圾收集器在丟棄之後擔心該封閉連接。

1

是的,關閉連接後無法做任何事情。你必須調用getConnection

0

由於Javadoc提到:

getConnection: Attempts to establish a connection to the given database URL. 

所以,是的,調用的getConnection()再次看起來像建立與數據庫的新連接,一旦你關閉以前的連接的唯一方式。

7

如果您已撥打connection.close();connection(假設java.sql.Connection類型)變得無用。此操作將釋放此Connection對象的數據庫和JDBC資源。

所以你需要獲得一個新的連接時,纔可以通過

connection = DriverManager.getConnection() 
+0

我在C#中做了所有事情之後,纔開始使用JDBC連接SQL Server連接,而且昨天的這半天,這對我來說是一個很大的謎團。 – JoeManiaci 2015-06-25 15:47:31

0

那麼理想的情況下繼續進行我做了稍微不同的方式,給了不同的解決方案。

而是打開和關閉數據庫,對客戶的每一個要求的字面發生的事情,我做了一個類的單一實例,並作出安排,只要服務器的過程是活的重複使用單一打開的連接。

簡而言之:

我有getConnection()內部Database

public Connection getConnection() throws Exception { 
    try { 
     String connectionURL = "jdbc:mysql://localhost:3306/someDatabase"; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     if (connection == null) { 
      connection = DriverManager.getConnection(connectionURL, "someUser", LOCAL_MYSQL_PASSWORD); 
     } 

     return connection; 
    } catch (Exception e) { 
    } 

} 

Database類是單例,因此重複使用相同的類和再使用相同的連接。

我已經測試了這個show processList,這個給了大約100個連接如果我不關閉連接,甚至如果我關閉連接,實際進程不會被殺死,而是進入睡眠狀態相反,只要同一個客戶端會請求相同的請求,就會使用它,但如果您有15個請求,那麼每個請求都會有單獨的進程,因此關閉和打開連接對我來說並不是最佳解決方案。

由此我有1個單獨的進程負責查詢層。