2011-08-10 87 views
0

我使用Singleton設計模式爲我的數據庫連接。問題與單身數據庫連接

這是我的方法。

 private static Connection con=null; 
public static Connection getConnection(){ 
    try { 
     if(con==null){ 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", ""); 
     }else if(con.isClosed()){ 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", ""); 
     } 
    } catch (Exception ex) { 

    } 
    return con; 
} 

每當我重新啓動mysql服務,它會生成以下錯誤,並重新啓動應用程序還再次運行。

錯誤:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

誰能告訴什麼是實現這個避免這種錯誤的正確方法是什麼?

謝謝。

+0

我想你應該提供完整的堆棧跟蹤。 – Swagatika

+0

感謝Janydee,joostschouten.i發現我錯過了那個。 – sampathpremarathna

回答

1

你對面......好吧,一切都重複使用相同的Connection對象。你的單身人士應該是一個ConnectionFactory,每次都會返回一個新的連接。

正如有人已經指出的那樣,而不是創建/關閉新的連接使用連接池。您不必親自編寫它 - 這裏有可用的開源實現,如C3PO或DBCP。

更妙的是,而不是從頭再來重塑這個輪子,使用DataSource。如果你可以使用Spring,那麼它只有一個DriverManagerDataSource實現。否則,請隨時查看它是如何編寫和編寫的(當Spring不是'允許'技術時,我至少做了一次)。最後,如果您運行的是Tomcat,JBoss或Glassfish等容器,那麼您可以簡單地將DataSource綁定到JNDI並使用它。這不必處理池和配置/部署的問題(東西像數據庫的用戶名密碼&)本身釋放了您的應用程序。

2

你應該去connection-pooling.

你的機制將無法正常工作,如果MySQL服務器丟棄的連接一些如何。