2015-10-09 75 views
0

這是我用來建立jdbc連接的代碼。 我可以使用下面顯示的getInstance()MysqlConnection類對象可以使用MysqlConnection.getInstance()在其他類中調用。 此代碼段運作正常。但我想知道, 是這段代碼不正確?我可以這樣使用嗎?可以用Mysql jdbc連接使用Singleton模式嗎?

public class MysqlConnection { 

//use singleton design patern 
private static MysqlConnection instance; 
public static MysqlConnection getInstance(){ 
    if(instance == null) { 
    instance = new MysqlConnection(); 
    } 
    return instance; 
} 

// init database constants 
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver"; 
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/storetest"; 
private static final String USERNAME = "root"; 
private static final String PASSWORD = "root"; 
private static final String MAX_POOL = "250"; 

// init connection object 
private Connection connection; 
// init properties object 
private Properties properties; 

// create properties 
private Properties getProperties() { 
    if(properties == null) { 
    properties = new Properties(); 
    properties.setProperty("user", USERNAME); 
    properties.setProperty("password", PASSWORD); 
    properties.setProperty("MaxPooledStatements", MAX_POOL); 
    } 
    return properties; 
} 

// connect database 
public Connection connect() { 
    if (connection == null) { 
     try { 
      Class.forName(DATABASE_DRIVER); 
      connection = (Connection) DriverManager.getConnection(DATABASE_URL, getProperties()); 
     } catch (ClassNotFoundException | SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
    return connection; 
} 

// disconnect database 
public void disconnect() { 
    if(connection != null) { 
    try { 
     connection.close(); 
     connection = null; 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    } 
}  

} 
+0

在完全不同的情況下,*這是一個破碎的Singleton *。你需要*調用'getInstance()'和'disconnect()'同步* – TheLostMind

+0

你應該使用依賴注入來注入你的sqlconnection到那些需要它的類。辛格爾頓只是另一個全球。 –

回答

1

對一個SqlConnection對象使用單例不是一個好主意。
getting db connection through singleton class

但是,如果你仍然想使它單,替換:

public class MysqlConnection { 

    //use singleton design patern 
    private static MysqlConnection instance; 
    public static MysqlConnection getInstance(){ 
     if(instance == null){ 
      instance = new MysqlConnection(); 
     } 
     return instance; 
    } 

隨着enum

public enum MysqlConnection { 
    INSTANCE; 
    public static MysqlConnection getInstance(){ 
     return INSTANCE; 
    } 

欲瞭解更多詳情,請參閱Implementing Singleton as Enum in Java

+0

我不認爲一個sql連接的單例是一個非常好的主意。 –

+0

@PhilipStuyck是的你是對的,謝謝:)。更新了答案。 –