当前位置: 首页 > 面试题库 >

数据库连接应该是单例吗?

苏骏
2023-03-14
问题内容

用Java创建单例的最佳方法是什么?数据库连接是否应该是单例连接(单例连接是自动线程安全的)?因为理论上数据库不能被许多用户同时访问。


问题答案:

数据库连接通常不应为单例。

两个原因:

  1. 许多数据库驱动程序不是线程安全的。使用单例意味着如果您有多个线程,它们将共享同一连接。单例模式不会给您带来安全感。它仅允许许多线程轻松共享“全局”实例
  2. 就我个人而言,我认为Singleton通常会导致不良设计:请参阅此帖子(由其他人发表)http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/

而不是考虑数据库池。池是共享的(如果需要,可以是单例)。当您需要执行数据库工作时,请执行以下操作:

getConnectioFromPool();

doWork()
closeConnection() // releases back to pool

样本池库:

  • http://commons.apache.org/dbcp/
  • http://jolbox.com/


 类似资料:
  • 问题内容: 在PHP中使用单例而不是全局的数据库连接有什么好处?我觉得使用单例而不是全局会使代码变得不必要地复杂。 全局编码 用Singleton编码 如果除了全局或单例之外,还有一种更好的初始化数据库连接的方法,请提及它并描述它比全局或单例具有的优势。 问题答案: 我知道这很旧,但是Dr8k的答案 几乎 就在那里。 当您考虑编写一段代码时,假设它会改变。这并不意味着您要假设它会在将来的某个时刻对

  • 问题内容: 我正在尝试创建一个简单易用的单例类来连接到mysql数据库并执行查询,代码可以正常工作,并且我没有任何问题,但是由于我是OOP的新手,所以我想知道这是否是不是坏习惯。 这是课程 当我想使用该类时,我会做: 问题答案: 单身人士是个坏消息。 他们将全局状态引入程序。大多数程序员应该熟悉为什么全局状态不好。 它们在单例和使用它的任何类之间引入了紧密的耦合。这意味着您不能在不重用单例的情况下

  • 本文向大家介绍python连接oracle数据库实例,包括了python连接oracle数据库实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python连接oracle数据库的方法,分享给大家供大家参考。具体步骤如下: 一、首先下载驱动:(cx_Oracle) http://www.python.net/crew/atuining/cx_Oracle/ 不过要注意一下版本,根据你的情

  • 连接数据库 在能够对MongDB进行操作之前,需要使用BuguFramework创建一个数据库连接,代码如下: BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.connect("192.168.0.100", 27017, "mydb", "username", "password"); 也可以

  • 一、全局配置定义 return array( 'DB_TYPE' => 'mysql', 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'thinkcmf', 'DB_USER' => 'root', 'DB_PWD' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' =>

  • ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。数据库抽象访问层基于PDO方式,目前内置包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。 如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。 配置文件