您好banq,请教连接池的问题

06-09-02 xysniper
         

您好,我从IBM网站上看到关于你的一篇"使用JAVA中的动态代理实现数据库连接池"我还有几个凝点:

第一:不管是直接得到连接,还是通过DataSource得到连接,如果直接调用java.sql.Connection.close(),都是将连接直接从内存中销毁,你觉的这样使用是不是不好?

第二:如果第一点的使用方法不好,那么在服务器上配制了连接池, 在程序中通过DataSource得到连接,用完后直接Connection.close(),这种方法和释放连接(不直接关闭,而是放回连接池)在使用连接上存在什么问题?

第三:都知道,使用连接池就是为了重用连接,但如果直接关闭连接,这样将起不到连接的重用,我看大多数项目都这样使用,请问这种使用方法还能体现使用连接池重用连接的目的吗?

您有什么看法?

         

banq
2006-09-05 10:08

我的看法是:不必对如何做连接池去研究太多,会用即可,见我的这个帖子:

http://www.jdon.com/jive/thread.jsp?forum=91&thread=28456#19887163

xysniper
2006-09-09 11:11

你好,我同意你的看法,只是我有点不清楚

你能告诉我使用服务器提供的连接池时,应该如果关闭连接,是直接Connection.close()吗?还是自己写个什么程序,让连接释放回连接池

superbible
2006-09-12 11:44

连接池的使用,对于程序是完全透明的。即你原来应该在finnally里关闭连接,现在仍然一样。

但要理解的是,连接池会修改Connection实现类的close()方法为:将connection的实例状态置为可重新使用,分配给下一个连接请求,而不是物理的关闭连接。

Connection只是一个接口,接口是一样的,所以对程序是透明的。但实现,它可以修改。这一点,在tomcat等服务器中一样,HTTPServletRequest等都是接口,你若想搞点什么,可以将实现类替换为你自己的。

xysniper
2006-09-12 19:01

多谢你的回答,你的意思是说:连接池会复写Connection.close(),实现是释放,而不是关闭?