日期:2014-05-18  浏览次数:20605 次

释放连接问题,在线等.....
在配置文件中设置了连接池Max=50
在应用中,有以下字段
public Connection conn;
在一个函数中得到连接
conn=DriverManager.getConnection(...);
在另2个函数中使用连接
void funca()
{
conn.aaa();
conn.close();
}
void funcb()
{
conn.bbb();
conn.close();
}

还有函数
void myclose()
{
conn.close();
}
现在的问题是:
如果每个实际应用只使用funca(),funcb()中的任意一个
程序正常
如果某个应用要依次执行funca(),funcb()才能解决问题
那么,由于在funca()中进行了conn.close()操作,funcb()一定执行异常
如果在funca(),funcb()中删除conn.close(),程序可以正常运行
但是,这里有个问题
1、由于两次调用了使用conn的函数,对连接池的占用是1个,还是2个?
2、这时的myclose()执行会全部释放占用连接吗?
3、如果一个应用要连续使用不带conn.close()的函数超过70个,会造成没有可用连接吗?
4、一般来说,一个释放的连接过多久可以被重新使用(我觉得好像不能立即使用!)










------解决方案--------------------
1、调用一次就占用一个,连接池的连接是你设置好的,Max=50,无论你是否.close了,只要调用一次,就会占用一个 
2、谁调用,释放谁 
3、会,70个连接已经超过了你设置的Max=50 
4、释放的连接可以立即使用