今天看了一个DB访问的类,用的是连接池,其中有个问题没搞明白,高手指点下,部分代码如下://创建连接池,取得DataSource
OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
ocpds.setDriverType(driver/*"oracle.jdbc.driver.OracleDriver"*/);
ocpds.setURL(url);
ocpds.setUser(user);
ocpds.setPassword(passwd);
//Use Oracle Connection Cache implementation
OracleConnectionCacheImpl ocacheimpl = new OracleConnectionCacheImpl(ocpds);
//Set the maximum number of connections
ocacheimpl.setMinLimit (jdbcConnPoolMin);
ocacheimpl.setMaxLimit (jdbcConnPoolMax);
//set the scheme
ocacheimpl.setCacheScheme (jdbcOracleConnCacheScheme);
dataSource = (DataSource)ocacheimpl;下面比如调用一个Select方法,首先从连接池中取得一个连接:
conn = dataSource.getConnection();
try{
//对数据库的查询操作...
}catch(){
} finally {
if (rs != null) rs.close();
if (statement != null) statement.close();
if (conn != null) conn.close();
}
没搞明白的地方就在那个conn.close();,这里的关闭连接是销毁这个连接还是把连接返回到连接池中?
如果是销毁连接的话,那连接池就没什么用吧,等于查一次建一次连接?还有个问题,这里所用的连接池,它有自己的管理方法么,比如到了最大连接数了怎么处理?连接超时怎么处理?
如果这些没有封装,那自己加的话应该怎么写这些功能?ocacheimpl.setCacheScheme (jdbcOracleConnCacheScheme);这里实际设的是jdbcOracleConnCacheScheme = OracleConnectionCacheImpl.FIXED_WAIT_SCHEME
请问FIXED_WAIT_SCHEME对应什么模式?有什么用?
OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
ocpds.setDriverType(driver/*"oracle.jdbc.driver.OracleDriver"*/);
ocpds.setURL(url);
ocpds.setUser(user);
ocpds.setPassword(passwd);
//Use Oracle Connection Cache implementation
OracleConnectionCacheImpl ocacheimpl = new OracleConnectionCacheImpl(ocpds);
//Set the maximum number of connections
ocacheimpl.setMinLimit (jdbcConnPoolMin);
ocacheimpl.setMaxLimit (jdbcConnPoolMax);
//set the scheme
ocacheimpl.setCacheScheme (jdbcOracleConnCacheScheme);
dataSource = (DataSource)ocacheimpl;下面比如调用一个Select方法,首先从连接池中取得一个连接:
conn = dataSource.getConnection();
try{
//对数据库的查询操作...
}catch(){
} finally {
if (rs != null) rs.close();
if (statement != null) statement.close();
if (conn != null) conn.close();
}
没搞明白的地方就在那个conn.close();,这里的关闭连接是销毁这个连接还是把连接返回到连接池中?
如果是销毁连接的话,那连接池就没什么用吧,等于查一次建一次连接?还有个问题,这里所用的连接池,它有自己的管理方法么,比如到了最大连接数了怎么处理?连接超时怎么处理?
如果这些没有封装,那自己加的话应该怎么写这些功能?ocacheimpl.setCacheScheme (jdbcOracleConnCacheScheme);这里实际设的是jdbcOracleConnCacheScheme = OracleConnectionCacheImpl.FIXED_WAIT_SCHEME
请问FIXED_WAIT_SCHEME对应什么模式?有什么用?
楼主的例子恐怕没用到连接池吧
谁有好的连接池管理管理程序代码,能发个给我看看么[email protected]
最少是用datasource的,不要用drivermanger
连接池方式下方式下获得的是一个经过装饰的连接,这个连接的close方法作的事情,是把自己持有的连接还回到连接池,而不是直接关闭.稍微看一眼DBCP的源代码就明白了.
我查了一下OracleConnectionCacheImpl.setsetCacheScheme ();可以设置3种类型
当连接到达最大数时:
1.DYNAMIC_SCHEME//动态增加
2.FIXED_RETURN_NULL_SCHEME//直接返回空
3.FIXED_WAIT_SCHEME//一直等待,拒绝连接
谁能比较一下三种类型的优缺点?
最好是能结合Rowsets使用的,正在学习连接DB,想找一种比较好的方法用到自己的程序中,大家帮忙