我写了一个静态方法用来执行sql语句,如何关闭连接(如下)
public class ExecSql extends Conn {
  private static ResultSet rs=null;
  private static Statement st=null;
  /**
   * 执行查询sql语句,返回ResultSet
   */
  public static ResultSet ExecQuery(String sql){
    try{
      st = getConn().createStatement();
      rs=st.executeQuery(sql) ;
    }catch(Exception e){
      e.printStackTrace();
    }
    return rs;
  }
  /**
   * 执行增加,修改,删除的sql语句,成功则返回true
   */
  public static boolean ExecUpdate(String sql){
    int i=0;
    try{
      st = getConn().createStatement();
      i=st.executeUpdate(sql) ;
    }catch(Exception e){
      e.printStackTrace();
    }
    if(i>0){
      return true;
    }else{
      return false;
    }
  }
  /**
   * 关闭结果集
   */
  public static void Close(){
    try{
      if(rs!=null){ 
        rs.close();
        rs=null;
      }
      if(st!=null){
        st.close();
        st=null;
      }
      closeConn();
    }catch(SQLException e){
      e.printStackTrace();
    }
    
  }
}

解决方案 »

  1.   

    建议在函数外获得连接,作为参数传给ExecQuery,然后在函数外关闭连接。
    唉,不过那样ExecQuery也没几条语句了,干脆别写成一个函数,直接写那几条语句得了。
      

  2.   

    把你的closeConn();执行语句那一部分放在finally里面
      

  3.   

    利用try{
       }catch(Exception e)
       {
       }finally
        { 释放资源}不过这样关闭的话ResultSet又无用了,所以建议不要返回ResultSet,返回它的时候,在用的时候往往会出现诸如连接关闭的问题,不能很好使用finally语句,建议返回集合类,比如Iteratror等
      

  4.   

    steedhorse(晨星) 建议在函数外获得连接,作为参数传给ExecQuery,然后在函数外关闭连接。
    唉,不过那样ExecQuery也没几条语句了,干脆别写成一个函数,直接写那几条语句得了。-----
    请晨星说明一下原因好吗?