我实在有些地方不明白,请高人解决。(jdbc连接sqlserver,没用框架。如果现在找不到解决方法,可能要用hibernate)
数据库连接对象我从不声明的成员变量,全是局部变量,而且daoimpl我是extends数据库类的(这块大家怎么做的).
进入主题:
public void close(Connection con, PreparedStatement ps, ResultSet rs){
    try {
            if (rs != null)
                rs.close();//这里出现异常了,rs关闭了吗?,如果没有怎么解决,ps , con也是一样的。
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (st != null)
                    st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (conn != null)
                    try {
                        conn.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            }
        }
    }
}希望大家说出在实际项目当中怎么处理的.

解决方案 »

  1.   

    一般这样的关闭都是写在
    finally 
    中的
      

  2.   

    rs,ps,con都加到finally中,记住即使是放在finally中也要给rs,ps,con都加上try/catch
      

  3.   

    你确定你的这些对象都是出于open状态的?如果已经关闭了,是colse状态,你再调用close是会异常的吧
      

  4.   

    public static void closed(ResultSet rs, PreparedStatement pstm,
    Connection con) {
    try {
    if (rs != null) {
    rs.close();
    rs = null;
    }if (pstm != null) {
    pstm.close();
    pstm = null;
    }
    if (con != null) {
    con.close();
    con = null;
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
      

  5.   

    public static void closed(ResultSet rs, PreparedStatement pstm,
    Connection con) {
    try {
    if (rs != null) {
    rs.close();}if (pstm != null) {
    pstm.close();}
    if (con != null) {
    con.close();}
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    或者是这样啊,无所谓的
      

  6.   

    connection关闭了,其他都会关闭,不用担心
      

  7.   

    我都是这样写的 public static void close(Connection con) {
    if (con != null)
    try {
    con.close();
    } catch (SQLException e) {
    // 不做任何处理,静默处理
    }
    } public static void close(ResultSet rs) {
    if (rs != null)
    try {
    rs.close();
    } catch (SQLException e) {
    // 不做任何处理,静默处理
    }
    } public static void close(Statement stmt) {
    if (stmt != null)
    try {
    stmt.close();
    } catch (SQLException e) {
    // 不做任何处理,静默处理
    }
    }
      
    public static void DBClose(ResultSet rs, Statement stmt, Connection conn) {
    try {
    close(rs);
    } finally {
    try {
    close(stmt);
    } finally {
    close(conn);
    }
    }
    }
      

  8.   

    哥们儿很诚心的给你写个!哥们前阵子天天JSP!
    首先建个基类包随便你怎么起!
    下面建一个基础类用于连接数据库和关闭数据库的
    public static void closeConn(ResultSet rs,PreparedStatement ps,Statement st,Connection con){
        try{
           if(rs != null){
              rs.close();
            }
            if(ps != null){
              ps.close();
            }
            if(st != null){
              st.close();
            }
            if(con != null){
              con.close();
            }
          } catch (Exception e) {
            e.printStackTrace();
         }
    }
    不敢说绝对不会出错只要你在实现类的封装的父类中有声明了
    Connection con;
    Statement st;
    PreparedStatement ps;
    ResultSet rs;
    注意下作用域问题!
      

  9.   

    不好意思!
    JDBC是逆向关闭的!
    必须从底下的对象开始关!
      

  10.   

    我平时只这样写的:
    public static void close(Connection connection){
        try{
           if(connection != null){
              connection.close();
           }
        }catch(SQLException e){
           connection = null;
        }
    }public static void close(Statement statement){
        try{
           if(statement != null){
              statement.close();
           }
        }catch(SQLException e){
           statement = null;
        }
    } public static void close(ResultSet rs){
        try{
           if(rs != null){
              rs.close();
           }
        }catch(SQLException e){
           rs = null;
        }
    }public static void close(Connection connection,Statement statement,ResultSet rs){
        close(connection);
        close(statement);
        close(rs);
    }
      

  11.   

    其实是没有必要的,conn是个电闸,stmt和rs是灯的开关正常是应该先关灯再关电闸你直接关电闸也是没问题的可以参加commons-DBUtil开源jar的写法,代码比较简单
      

  12.   

    各们大哥,连接池也需要关闭啊。
    Connection PreparedStatement ResultSet 这些你不关?
    如果是c3p0的话,ComboPooledDataSource 这个你不关?
      

  13.   

    finally里面一个一个关 - -
      

  14.   

    一般要想干净的关闭数据库connection,在finally里面写即可
      

  15.   


    finally 的关闭难道就不会出问题?我想是lz的提问本身就有问题
      

  16.   

    如果我没记错的话,rs可以不用关闭,只需要关闭connection,statement即可。