单例模式的数据库连接类

发布于 2021-11-19 16:34:41 字数 3198 浏览 667 评论 8

public class DataBaseUtils {

    private static final Logger log = Logger.getLogger(DataBaseUtils.class.getName());
    
    private static BasicDataSource dataSource = null;
    static{
        dataSource = new BasicDataSource();
        Properties dataBase = Contants.dataBase;//Tomcat启动时,在servlet中已经初始化
        dataSource.setDriverClassName(dataBase.getProperty("dataBase_driver"));
        dataSource.setUrl(dataBase.getProperty("dataBase_url"));
        dataSource.setUsername(dataBase.getProperty("dataBase_user"));
        dataSource.setPassword(dataBase.getProperty("dataBase_password"));
        dataSource.setInitialSize(Integer.parseInt(dataBase.getProperty("dataBase_initialSize").trim()));
        dataSource.setMaxIdle(Integer.parseInt(dataBase.getProperty("dataBase_maxIdle").trim()));
        dataSource.setMinIdle(Integer.parseInt(dataBase.getProperty("dataBase_minIdle")));
        dataSource.setMaxWaitMillis(Long.valueOf((dataBase.getProperty("dataBase_maxWait").trim())));
    }
    //私有的构造方法
    private DataBaseUtils(){
    }
    
    //内部类实现单例模式
    private static class DBUtilsHolder{
        private static DataBaseUtils dbUtils = new DataBaseUtils();
    }
    
    /**
     *
     * 获取连接数据库类的实例
     * @date   2014年3月11日
     */
    public static DataBaseUtils getInstance(){
        return DBUtilsHolder.dbUtils;
    }
    
    /**
     *
     * 连接数据库方法
     * @date   2014年3月11日
     */
    public Connection getConn(){
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            log.error("数据库连接异常," + e.getMessage());
            throw new DataBaseException("获取数据库连接异常" + e.getMessage());
        }
        return connection;

    }

}

以上是我自己创建的连接数据库的类,大家看一下有啥缺陷,欢迎批判

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

葬花如无物 2021-11-26 10:33:44

static方法实现的,数据库连接失败了,导致类加载失败,这个不好吧?如果类里面还有其他方法,也没法使用了。。。 非static方法,调用时再分配内存、再去连接;如果有错误,不至于影响太大;如果不用了,还能销毁呢。 不是更好吗?

虐人心 2021-11-26 10:33:20

整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。

奢华的一滴泪 2021-11-26 10:29:26

另外想说一句,如果是自己写着玩的,无所谓,如果是工程上用的,请记住,地球上还有一个叫"连接池"的玩意。

彩扇题诗 2021-11-26 10:10:14

连接池+1

虐人心 2021-11-26 07:35:07

回复
DBCP就是连接池呀

噩梦成真你也成魔 2021-11-25 17:47:30

整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。

因为看清所以看轻 2021-11-22 07:15:19

整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。

沦落红尘 2021-11-21 16:25:57

整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文