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;
}