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

使用数据库连接池,servlet要操作数据库,取连接跟释放连接难道不是放在init、destroy中的?
我是在init方法中取连接,destroy中释放连接,但是发现servlet执行后一直有效,也就是一直占着连接(没有执行destroy方法),很快达到了maxactive数目而使访问出错。
难道要放到doPost(doGet)中?
doPost(...){
    取连接;
      操作数据库;
    释放连接;
}
难道要这样?

------解决方案--------------------
数据库操作完立即释放,即:
Connection conn;
try{
conn = getConnection();

//operation
}catch(Exception e){
//
}finally {
conn.close();
}
------解决方案--------------------
從頭到尾只有一個servlet的對象,
你把連接寫在init方法中,
那么,一直到你的servlet生命周期結束才會釋放掉你的數據庫連接,
肯定是达到了最大連接数目啦.

------解决方案--------------------
init是初始化servlet對象
destroy是銷毀servlet對象

記住,只有一個servlet對象
------解决方案--------------------
晕,这位兄台也是2星了

j2ee很多东西都是单例的,比如serlvet/jsp
init/destory是服务器(准确地说是web应用)启动(或者该单例被创建)/销毁时调用的,只此一次。和doXxxx这种service方法无关