ConnectionPoolDataSource这个接口是干什么用的

fxbird 2006-04-24 10:14:32
和DataSource有什么区别?都能用来作连接池吗
...全文
835 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxbird 2006-05-08
  • 打赏
  • 举报
回复
那不是没法指定连接个数了?OracleOCIConnectionPool也是个连接池的实现类,不过可以设置最大连接数
jacklondon 2006-05-07
  • 打赏
  • 举报
回复
看源代码啊。不是说了 connection pool 就是 object pool 么? pool buffer 一般用 array list(buffer 一般都回固定在某个大小)
fxbird 2006-04-30
  • 打赏
  • 举报
回复
不知它是怎么维护有多少个连接的
fxbird 2006-04-30
  • 打赏
  • 举报
回复
to jacklondon:
OracleConnectionPoolDataSource没有设置最大连接数、最小连接数等等的方法吗
fxbird 2006-04-29
  • 打赏
  • 举报
回复
to jacklondon:
oracle已经有ConnectionPoolDataSource的实现了?那倒不错,不过这东西怎么用呢,连设置url,用户名,密码都没有,怎么建立连接啊,能给个例子吗?
jacklondon 2006-04-29
  • 打赏
  • 举报
回复
这是 oracle 自己的 jdbc sample.

class PooledConnection1
{
public static void main (String args [])
throws SQLException
{

// Create a OracleConnectionPoolDataSource instance
OracleConnectionPoolDataSource ocpds =
new OracleConnectionPoolDataSource();

String url = "jdbc:oracle:oci8:@";
try {
String url1 = System.getProperty("JDBC_URL");
if (url1 != null)
url = url1;
} catch (Exception e) {
// If there is any security exception, ignore it
// and use the default
}

// Set connection parameters
ocpds.setURL(url);
ocpds.setUser("hr");
ocpds.setPassword("hr");

// Create a pooled connection
PooledConnection pc = ocpds.getPooledConnection();

// Get a Logical connection
Connection conn = pc.getConnection();

// Create a Statement
Statement stmt = conn.createStatement ();

// Select the NAME columns from the EMPLOYEES table
ResultSet rset = stmt.executeQuery
("select FIRST_NAME, LAST_NAME from EMPLOYEES");

// Iterate through the result and print the employee names
while (rset.next ())
System.out.println (rset.getString (1) + " " + rset.getString (2));

// Close the RseultSet
rset.close();
rset = null;

// Close the Statement
stmt.close();
stmt = null;

// Close the logical connection
conn.close();
conn = null;

// Close the pooled connection
pc.close();
pc = null;
}
}
jacklondon 2006-04-28
  • 打赏
  • 举报
回复
ConnectionPoolDataSource 在 Oracle 和 Mysql 的 JDBC driver 中都有。
一般来说,如果开发 web 应用,j2ee server 都有自己的 connection pool,只要配置用什么 jdbc driver 就可以了。Tomcat 是用 dbcp 的。web 应用没有必要自己选一个连接池。
普通的 java application 可以用 dbcp,data source 用 BasicDatasource 就可以了。对于我们来说,功能符合要求就可以。除非你的应用有特殊要求。
jacklondon 2006-04-28
  • 打赏
  • 举报
回复
"做连接池用 DataSource 不就行了吗",
确实如此。其实不用 datasource 也可以用连接池,你完全可以用一个 list 做 buffer 放上几个 connection, 每次要用的时候从中间拿一个 connection, 并加上“正在使用”的标志,用完了放回去。
只是因为 DataSource 是 Sun 定义的拿 connection 的接口, ConnectionPoolDataSource 是 Sun 定义的从 connection pool 中拿 connection 的接口。
我见到的工具包中,大多只用 DataSource ,没有看出来 ConnectionPoolDataSource 有什么区别。像 hibernate 和 spring 中都只用了 DataSource ,没有用 ConnectionPoolDataSource 。可以认为 ConnectionPoolDataSource 是多余的。
fxbird 2006-04-28
  • 打赏
  • 举报
回复
to 楼上:
谢谢你的回复,还想问一下,InstanceKeyDataSource也是DataSource的实现,像你说的,它们是标准的连接池,那么标准的Datasource的实现与ConnectionPoolDataSource有什么联系和区别,我们在项目中究竟该采用实现哪个接口的连接池,并且我现在还没发现什么驱动或者组件实现过后者,它们二者应该在jdbc驱动中实现还是应该靠dbcp这样第三方的来实现呢,不明白。
jacklondon 2006-04-26
  • 打赏
  • 举报
回复
最早的 JDBC 没有 datasource 的概念。
后来(JDBC 2.0 ??)加入了三个 interface
javax.sql.DataSource(普通情况下面用);
javax.sql.XADataSource(多个数据库联合做 transaction);
javax.sql.ConnectionPoolDataSource(连接池 datasource)。

理论上将,可以写一个 datasouce 同时实现这三个 datasource 接口。只是这三个 datasource 之间没有继承关系,接口也不统一。目前没有发现有人在一个 class 中同时实现这三个 datasource 接口。
对于调用 datasource 的代码来说,如果已经用了一种 datasource 以后换另外一种 datasource, 可能涉及到修改很多代码。我见过一个项目有这样的情况,比较麻烦。

jacklondon 2006-04-26
  • 打赏
  • 举报
回复
BasicDatasource 使用的是 object pool, 不是标准的 JDBC connection pool, 它没有实现 ConnectionPoolDataSource 接口. 功能也许一样,但是不是按照 JDBC 规范实现的。BasicDatasource 可以用在普通非J2EE 的 Java Application 上面。这是一个好处。
dbcp 中其他几个 datasource, 包括 InstanceKeyDataSource 子类(PerUserPoolDataSource,SharedPoolDataSource) 是按照正规的 JDBC connection pool 来写的。用的人好像不如 BasicDatasource 多。
DriverAdapterCPDS(CPDS 应该是 connection pool data source 的缩写)则是为早期的 JDBC driver 提供 connection pool 的封装。最好不要用它。如果要用 connection pool, 直接下载一个有 connection pool 的 jdbc driver。
fxbird 2006-04-26
  • 打赏
  • 举报
回复
up
fxbird 2006-04-26
  • 打赏
  • 举报
回复
做连接池用DataSource不就行了吗,tomcat中的连接池,不就是用dbcp中的BasicDatasource吗,它就是实现了DataSource接口的类
baggio785 2006-04-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/baggio785/archive/2006/04/24/674822.aspx
fxbird 2006-04-25
  • 打赏
  • 举报
回复
to Ryo_Hazuki:
连接池不是用Datasource的实现类就行了吗,为什么还用ConnectionPoolDataSource呢。
to jacklondon:
因为设计得不好,所以重新设计了个ConnectionPoolDataSource?

to baggio785:
你给我的文章没有提到这个接口啊。
fxbird 2006-04-25
  • 打赏
  • 举报
回复
up
jacklondon 2006-04-24
  • 打赏
  • 举报
回复
可以用来做连接池下面的 DataSource.
jdbc 几个 DataSource 在设计的时候有些问题,几个 DataSource 的继承关系设计得不好。
Ryo_Hazuki 2006-04-24
  • 打赏
  • 举报
回复
驱动提供商基于这个接口写他的连接池实现
但不是所有的驱动都提供了这个实现

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧