接手别人的项目现在每个方法都有一个关闭。
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失败");
}
}
}
}不知道可行不?各位来指点下。原理上应该可以,不过由于自己不知道怎么测试,所以来问下大家了呵

解决方案 »

  1.   

    怎么开这么多个ResultSet和Statement。估计是几百行代码挤在一起了,这种项目只有两个字
    蛋疼
      

  2.   

    第一个是错误的写法。rs close的时候出异常了不能close ps 和 con你的方法可行,可以把Statement  改成Object 
    然后instanceof 一个方法都搞定了。真要这么做,如果全修改一下时间少的话,还是改程序吧
      

  3.   


    看到实际代码你会蛋碎一地的
    一个servlet4000多行。
      

  4.   

    一个serlvet有这么长,说明servlet用来处理流程了,不好,我servlet只会又来获取去和发送值
      

  5.   

    可以把Statement  改成Object 
    然后instanceof 一个方法都搞定了。
    没有看太懂,可以贴个大概示范代码么。
      

  6.   

    /**
     * 参数顺序 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){
        
         }
        }else{
         /*...*/
        }
    }
    }
      

  7.   

    这个框架是struts2,ibatis,整合的,已经被封装了一次了,所以像这种获取对象状态的,要经过那个框架非常麻烦,所以就单独另外定义的servlet了。
      

  8.   


    /**
     * 关闭数据库链接
     * @param rs
     * @param ps
     * @param conn
     */
    public static void close(ResultSet rs, PreparedStatement ps, Connection conn){
    DBConnUtil.close(rs, ps, null, conn);
    }
    public static void close(ResultSet rs, Statement sm, Connection conn){
    DBConnUtil.close(rs, null, sm, conn);
    }

    public static void close(ResultSet rs, PreparedStatement ps, Statement sm, Connection conn){
    if(null != rs){
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    try {
    if(null != ps){
    ps.close();
    }
    if(null != sm){
    sm.close();
    }
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
      

  9.   

    太牛逼的项目了,多多学习多谢JDBCA .
      

  10.   

    一个个关,一个个catch,保证一个关闭出现了异常,其他的还可以关上。
      

  11.   

    我比较赞成14楼的.得加个判断他是不是空.不然空.close()是会报错的