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

jsp无法关闭ORACLE数据库连接!
bean建的数据库连接;  
oracle10、tomcat-5.5、jdk-1_6;  
源码:  
private   Vector   OpenQuery(String   sql){  
Vector   al   =   new   Vector();  
ResultSet   rs   =   null;  
Statement   sta;  
Connection   con;  
try{  
con   =   getCon();  
sta   =   con.createStatement();  
rs   =   sta.executeQuery(sql);  
ResultSetMetaData   rsmd   =   rs.getMetaData();  
int   columnCount   =   rsmd.getColumnCount();  
while   (rs.next()){  
Object[]   obj   =   new   Object[columnCount];  
for   (int   i   =   0;   i <columnCount;   i++){  
obj[i]   =   rs.getString(i+1);  
}  
al.add(obj);  
}  
rs.close();  
sta.close();  
con.close();  
}catch(Exception   e){  
e.printStackTrace();  
}  
return   al;  
}
我发现有的数据库连接关不掉,用close()方法一直没有反应,死在里面,系统运行时间长了,这种关不掉的数据库连接越来越多,达到300多。其他的应用根本连接数据库!!

------解决方案--------------------
你这样写如果程序异常,这次连接就不会关闭。建议关闭数据库的代码写在finilly里面。
除去这个原因应该不是程序的问题了吧。
------解决方案--------------------
数据库关闭写在finally里
finally {
con.close();
}
不论有无异常finally都会被执行!
------解决方案--------------------
private Vector OpenQuery(String sql){
Vector al = new Vector();
ResultSet rs = null;
Statement sta;
Connection con;
try{
con = getCon();
sta = con.createStatement();
rs = sta.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while (rs.next()){
Object[] obj = new Object[columnCount];
for (int i = 0; i <columnCount; i++){
obj[i] = rs.getString(i+1);
}
al.add(obj);
}

}catch(Exception e){
e.printStackTrace();
}
finally {
rs.close();
sta.close();
con.close();
}

return al;
}