gpt4 book ai didi

java - 是 public Connection getInstance(String databasename);一种连接池形式?

转载 作者:行者123 更新时间:2023-11-29 05:56:23 24 4
gpt4 key购买 nike

在 javase 数据库应用程序中,我处理了很多短期对象(比如帐单等会计凭证)。
处理每个对象包括打开与数据库的连接并查找一些数据。并非所有对象都在同一个数据库中查找,但我根据某些对象属性选择了一个特定的数据库,所以我最终会打开多个连接。
我实际需要的只是每个数据库有一个连接。
所以我做了这样的事情:

public MyPool {

Map<String, Connection> activeConnections = new TreeMap<String, Connection>();

public Connection getConnection(String database_name) throws SQLException {

if (activeConnections.containsKey(database_name)) {
return activeConnections.get(database_name);
}

//Retrive the configuration data from a configuration object
ConnectionConfig c = Configuration.getConnectionConfig(database_name);

Connection connection = DriverManager.getConnection(c.url, c.user, c.password);

return connection;

}

问题是:
1) 因为我看到很多池库、DBCP、c3p0 和其他库:所有这些库的意义是什么,它们对这样的“基本”方法有什么补充?
类似 this 的教程对回答这个问题没有多大帮助,因为这里公开的基本解决方案完全符合他们对连接池的定义。

2) 这是一段将“公开”给其他开发人员的代码,这些开发人员可能会开发程序以从具有不同结构的数据库中检索数据,可能会从这个“池对象”获取连接。
在文档和代码中,将其称为“池”是正确的,还是有所不同,以至于调用“池”会产生误导?

最佳答案

您的代码不是该术语通俗用法中的连接池实现,因为每个数据源只有一个物理连接。对象池(在这种情况下,对象是一个连接)背后的概念是一些对象需要开销来配置。如您所知,在连接池的情况下,必须先打开数据库连接才能与数据库对话。

此处的不同之处在于,您的代码对于并发环境(如您提到的流行连接池实现)来说不是线程安全的。在网络等高并发环境中运行的应用程序不需要吸收在每个请求上建立连接的开销。相反,会维护一个打开的连接池,当请求完成连接工作时,它会返回到池中供后续请求使用。

这是必需的,因为连接是有状态的。您不能让多个请求同时共享同一个连接并保证任何类型的合理事务语义。

关于java - 是 public Connection getInstance(String databasename);一种连接池形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com