Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接类,我应该使用Singleton吗?_Java_Singleton - Fatal编程技术网

Java 连接类,我应该使用Singleton吗?

Java 连接类,我应该使用Singleton吗?,java,singleton,Java,Singleton,我有一个名为SQLConnection的类,负责打开和关闭jdbc连接。每当我需要打开一个连接时,我需要读取一个xml文件来向类atributes收费,然后我打开连接 我想为这个类创建一个单例设计模式,并读取constructor类上的xml文件 我问:哪一种方法更好,哪些方法可以提供最佳性能?对类进行静态维护,或者每次读取xml并创建对象类?啊,这是一个有10 ~~ 100个用户的web应用程序 这就像我所做的: public class SQLConnection { String

我有一个名为SQLConnection的类,负责打开和关闭jdbc连接。每当我需要打开一个连接时,我需要读取一个xml文件来向类atributes收费,然后我打开连接

我想为这个类创建一个单例设计模式,并读取constructor类上的xml文件

我问:哪一种方法更好,哪些方法可以提供最佳性能?对类进行静态维护,或者每次读取xml并创建对象类?啊,这是一个有10 ~~ 100个用户的web应用程序

这就像我所做的:

public class SQLConnection {

    String url = ""; 
    String driver = "";
    String userName = "";
    String password = "";

    public Connection openConnection() {

        Connection conn = null;     
        this.setAtributes();        

        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url, userName, password);
        } catch (Exception e) {
            e.printStackTrace();
        } 

        return conn;

    }


    public void closeConnection(Connection conn) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //read a xml file that have database infos
    public void setAtributes(){

        this.url = "lalala";
        this.userName = "lalala";
        this.password = "lalala";
        this.driver = "lalala";                 
    }
}
下面是我想做的:

public class SQLConnection {

    private static SQLConnection instance;

    String url = ""; 
    String driver = "";
    String userName = "";
    String password = "";

    private SQLConnection() {

    }

    public static synchronized SQLConnection getInstance() {
        if (instance == null)
            instance = new SQLConnection();
            setAtributes(instance);

        return instance;
    }

    public Connection openConnection() {

        Connection conn = null;     

        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url, userName, password);
        } catch (Exception e) {
            e.printStackTrace();
        } 

        return conn;

    }

    //read a xml file that have database infos
    public static void setAtributes(SQLConnection instance){

        instance.url = "lalala";
        instance.userName = "lalala";
        instance.password = "lalala";
        instance.driver = "lalala";     
    }
}

简短回答:

单例解决资源争用问题。 对于SQL连接,没有争用,您可以创建任意数量的连接。有关使用单例的更多详细信息,请参见:

正如其他人提到的,最好使用连接池。使用连接池也可以获得更好的性能。
关于连接池的好处:

请使用真正的连接池。永远不要使用单例连接。使用连接池。可能在第一句话就停止了,真的。在你能清楚说明为什么这是最好的方法之前,不要使用单例句型。(而且几乎从来都不是。)