使用jdbc在java中创建单例连接对象

使用jdbc在java中创建单例连接对象,java,jdbc,singleton,Java,Jdbc,Singleton,我正在尝试使用单例设计模式创建连接对象。这是正确的方法吗。请帮我找到合适的方法 package com.cisco.installbase.hiveconnector; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Connection; public class CreateConnection { private static Connection connec

我正在尝试使用单例设计模式创建连接对象。这是正确的方法吗。请帮我找到合适的方法

package com.cisco.installbase.hiveconnector;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;


public class CreateConnection {

        private static Connection connection = null;
        static final String drivername = "org.apache.hive.jdbc.HiveDriver";
        private static CreateConnection instance;

        private CreateConnection() {

            try{
                Class.forName(drivername);
                connection = DriverManager.getConnection("jdbc:hive2://hddev-c01-edge-01:50045/","phodisvc","B1GD4T4dev");
            }catch(ClassNotFoundException e){
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }

    }

        public static CreateConnection getInstance()
        {
            if(instance == null)
            {
                instance = new CreateConnection();
            }

            return instance;
        }
}
以我为例,它是有效的。(只需将URL、用户名和密码替换为您的)


}

这种初始化实例的方式不是线程安全的!如果您真的想使用延迟初始化,则需要添加同步。可能与的重复,但更重要的问题是,您是否真的希望CreateConnection类为singleton。例如,这意味着您永远不能有多个数据库连接,除非每个数据库都有自己的类。这也会造成多线程瓶颈——您可能需要同步对连接对象的所有访问,因为应用程序中的所有线程都使用同一个实例(这有点像单线程)。这意味着你的单例对象的生命周期就是应用程序的生命周期——它永远不会被垃圾收集。单例的另一个问题是它们使得在类之间创建隐藏的依赖关系变得容易。在测试过程中,他们很难改变自己的行为。总而言之,它们几乎是一种反模式,只适用于少数情况。
public class DatabaseConnection {

public static Connection con = null;

public static void dbConnect(String drv, String url, String usr, String pwd) {

    // CHARGEMENT DU PILOTE
    try {
        Class.forName(drv);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // CONNEXION BDD
    try {
        con = DriverManager.getConnection(url, usr, pwd);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}