是使用完后就直接关闭了吗?
解决方案 »
- 请问Dreamweaver中的站点和eclipse中的Web项目有什么区别
- 上海,J2EE,我为什么找不到工作?
- ognl的标签#property的意思
- SQL翻译成HQL 问题
- 一个有趣的问题,好奇的进来看看
- JAVA+JBOSS 4.0.3SP1+ORACLE 10G 向数据库添加中文记录时出现错误,且读不出数据库有中文的记录?HELP。。。
- 请各位高手帮忙,有关于struts中数据源的使用
- 急救,Tomcat4.0.6 (linux版)的问题,在线等待,请大家帮忙啊
- 求助:jbuilder9正式版的crack文件,(好象KeyGen.exe不顶用啊?~~)
- 这代码是不是有问题?
- hibernate+struts2+spring项目连接网络运行项目没问题,但断开网络时报错
- jquery jsp js 实现选择一个文件夹,文本框显示路径 希望大家关注下 进来说说解决思路
我说的是java.sql.Connection,使用完后直接掉Connection.close()关闭吗?还是有其它方式释放?
使用 c3p0 的话,也是 java.sql.Connection,只要是 JDBC 都是这个接口的对象!使用完后必须 con.close() 掉,使用连接池的话,执行 con.close 并不会关闭与数据库的 TCP 连接,而是将连接还回到池中去,如果不 close 掉的话,这个连接将会一直被占用,直接连接池中的连接耗尽为止。至于是如何做到 con.close 并不是真正意义上的关闭连接?而是直接将连接还回到池中去?一般有两种方式:一:使用装饰器模式,在装饰器构造中传入一个真正的 Connection,这个装饰器实现 Connection,使用构造 传入 Connection 委托重写所有方法,并改写 close 方法:public class ConnectionDecorator implements Connection { private Connection con = null;
public ConnectionDecorator(Connection con) {
this.con = con;
}
public void close() throws SQLException {
// 重写!
} public void commit() throws SQLException {
this.con.commit();
} public Statement createStatement() throws SQLException {
return this.con.createStatement();
} public Statement createStatement(int resultSetType, int resultSetConcurrency)
throws SQLException {
return this.con.createStatement(resultSetType, resultSetConcurrency);
} ......
}然后经过连接池控制的 Connection 对象都使用该装饰器进行包装二:动态代理:使用动态代理重新实现 close 方法,每个获得 Connection 是一个代理后的对象。
一个完善的连接池,其架构设计非常复杂,Connection#close 问题就是连接池诸多设计难点当中的一个。