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

这样关闭数据库连接行不到?
  接手别人的项目现在每个方法都有一个关闭。
finally {
try {
rs.close();
pstmt.close();
rs2.close();
pstmt2.close();
rs3.close();
pstmt3.close();
rs4.close();
pstmt4.close();
rs5.close();
pstmt5.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}


现在我想写个方法
   
 private void CloseStatement(Statement ...st){
for (int i = 0; i < st.length; i++) {
if(st[i]!=null){
try {
st[i].close();
} catch (SQLException e) {
System.out.println("关闭Statement失败");
}
}
}
}


不知道可行不?各位来指点下。原理上应该可以,不过由于自己不知道怎么测试,所以来问下大家了呵

------解决方案--------------------
rs
这都是一些对象,
如果你把这些对方都放到一个数组里面进行挨个遍历关闭的话,肯定是可以的。
但是感觉好像不是那么的直观。
------解决方案--------------------
怎么开这么多个ResultSet和Statement。估计是几百行代码挤在一起了,这种项目只有两个字
蛋疼
------解决方案--------------------
出现的太操蛋了。。
------解决方案--------------------
第一个是错误的写法。rs close的时候出异常了不能close ps 和 con

你的方法可行,可以把Statement? 改成Object 
然后instanceof 一个方法都搞定了。

真要这么做,如果全修改一下时间少的话,还是改程序吧
------解决方案--------------------
引用:
引用:
第一个是错误的写法。rs close的时候出异常了不能close ps 和 con

你的方法可行,可以把Statement  改成Object 
然后instanceof 一个方法都搞定了。

真要这么做,如果全修改一下时间少的话,还是改程序吧
靠,哥们说的真有道理。这些细节我怎么没有想到呢。学习中!!!

一个serlvet有这么长,说明servlet用来处理流程了,不好,我servlet只会又来获取去和发送值
------解决方案--------------------
引用:
引用:
怎么开这么多个ResultSet和Statement。估计是几百行代码挤在一起了,这种项目只有两个字
蛋疼。。。。。。
看到实际代码你会蛋碎一地的。。。
一个servlet4000多行。

楼主改完这次,下次千万别做了,要不然直接要累趴下了
------解决方案--------------------
/**
 * 参数顺序 ResultSet,然后Statement,最后Connection
 * @param objs 
 */
public static void  close(Object ...objs)
{
for(int i = 0; i < objs.length; ++i)
{
    if(objs[i] instanceof Statement)
    {
     try{
     ((Statement)objs[i]).close();
     }catch(SQLException e){
    
     }
    }else if(objs[i] instanceof ResultSet){
     try{
     ((ResultSet)objs[i]).close();
     }catch(SQLException e){
    
     }
    }else if(objs[i] instanceof Connection){
     try{
     ((Connection)objs[i]).close();
     }catch(SQLException e){
    
     }