可以使用Singleton模式与Mysql jdbc连接?

时间:2015-10-09 05:19:19

标签: java

这是我用来建立jdbc连接的代码。 我可以使用下面显示的getInstance()吗? 可以使用MysqlConnection在其他类中调用MysqlConnection.getInstance()类对象。 这段代码段工作正常。但我想知道, 这段代码不正确吗?我可以这样用吗?

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();
    }
  }
}    

}

2 个答案:

答案 0 :(得分:1)

SqlConnection对象使用Singleton不是一个好主意 见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

答案 1 :(得分:0)

您应该使用依赖注入将依赖项注入需要它们的类中。

可在此处找到一个示例:http://www.journaldev.com/2394/dependency-injection-design-pattern-in-java-example-tutorial

单身人士只是另一个全球性的,并且是你在这里使用它的方式的反模式。 What is so bad about singletons?