hi,加菲猫先生,连接池使用中遇到了若干小问题,help me:)也欢迎大家都来看看.
hi,加菲猫先生,连接池使用中遇到了若干小问题,help me:)也欢迎大家都来看看.
楼主National(清心)2001-12-12 09:21:25 在 Java / Web 开发 提问 我只保留了pool,作了少量修改,在叶面开始调用getconnection,叶面结束调用release,可是我怎样保证这个叶面一定被执行完毕了呢?对于jsp来说,是一次性解析完之后再显示叶面,还是边解析边显示。---经过测试是后者,那么可能调用不到release函数叶面就关闭了。这样那些连接该怎么释放(当前连接数减1)呢?!这样不是会造成想不到的问题吗?!
比如我测试的代码(Pool为修改过的带有初始化信息的原DBConnectionPool)
**********************************************
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.util.*" %>
<%@ page language="java" import="java.sql.*" %>
<%@ page language="java" import="Pool" %>
<jsp:useBean id="pool" scope="application" class="Pool"/>
<%
Connection con = pool.getConnection();
int count = 0;
if(con!=null)
{
Statement stmt = con.createStatement();
String sql = "select count(*) as count1 from contact_task";
ResultSet rs = stmt.executeQuery(sql);
try{
for(int i = 0;i<1000;i++)
{
out.print("1");
}
if(rs.next())
count = rs.getInt(1);
//stmt.close();
}
catch(Exception ex)
{
out.print(ex);
}
out.print(count);
pool.freeConnection(con);
}
else
out.print("can"t get connection! ");
%>
**********************************************
当我在一个框架页中不停的通过一个连接刷新的时候(按住回车键不放),一会儿察看数据库的连接数已经增加了很多了,即申请了很多连接,而且没有释放。---显然没有调用到freeConnection,但建立了N个stmt,导致数据库增长迅速!即使把//stmt.close();取消注释,效果也是一样的。(更奇怪了,难道stmt自动关闭?)
该怎么办才好呢?
还有,既然一个connection可以建立任意多的stmt,何必要把connection放到连接池呢,而不是把stmt放到连接池呢?
谢谢你!:) 问题点数:25、回复次数:3Top
1 楼National(清心)回复于 2001-12-12 09:32:34 得分 0
更为极端的情况。stmt在jdbc连接sybase数据库时不代表一个连接,而只是会话(和odbc 不一样),那么一个conn不是已经足够?--我需要的话就用它建立新会话,不就了结了?或许是多个连接减少用户等待时间吧.Top
2 楼ycats(加菲猫)回复于 2001-12-13 10:45:25 得分 25
try{
//your code here;
}
catch(Throwable the){
throw the;
}
finally{
releaseConnection();
}
没执行完就断的话,会有一个socketException抛出的。Top
3 楼National(清心)回复于 2001-12-14 08:56:02 得分 0
thanks!!Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
