在配置文件中设置了连接池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.   

    to wangdeyu97:
    1. 和调用的次数无关 ,所以是一个 
    2. 会 
    3. 有可能吧 
    ---------------------------------------------------
    既然你说1和次数无关
    那么3为什么不是一个,如果3也是一个,连接池还有可用连接啊!!!!
      

  2.   

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

  3.   

    我在封装funca(),funcb(),myclose()的类中定义了一个
    public Connection conn; 
    在一个函数中得到连接 
    conn=DriverManager.getConnection(...); 
    我希望这个连接可以被funca(),funcb()调用,由于你们所说的原因,在funca(),funcb()的中必须要有conn.close()
    ,保证连接被准确释放,那么如果有应用要依次调用funca(),funcb()来完成,是否意味着在funca()和funcb()中都要
    有一个得到连接的操作,那样的话,public Connection conn的定义与得到操作都没有意义了, 
    如何保证conn在类或包中的各个函数间传递呢?