请问大家BaseDao中的通用查询方法是如何写的?我写的如下:
但有一个问题是,不能关闭连接,如果连接不关闭那岂不是很耗服务器资源???public static ResultSet excuteQuery(String sql,Object[]  args) throws ClassNotFoundException, SQLException{
ResultSet rs=null;
Connection conn=getConn();
PreparedStatement pst=null;
pst=conn.prepareStatement(sql);
if(null!=args){
for(int i=0;i<args.length;i++){
pst.setObject(i+1, args[i]);
}
}
rs=pst.executeQuery();
                  //closeAll(null, pst, null);    这里如果不注释掉,会报错:连接已关闭。
return rs;
}

解决方案 »

  1.   

    return rs;你return rs作甚?你应该将数据取出来,封装进一个bean中,然后将bean放到一个list中,然后返回这个list
    而不是直接返回rs
      

  2.   

    以上是baseDao中的一个通用查询类呀,不然每次查询时都写最原始的connection,prepareStatement?
    所以返回ResultSet,在Impl层中调用再返回Listk呀
      

  3.   

    既然是baseDao,还有其他dao extends 这个dao,那么也可以在子类中关闭
      

  4.   

    在调用excuteQuery()这个方法的时候关闭不就可以了吗?
    反正你返回了一个ResultSet
      

  5.   

    干脆向我这样吧public static boolean upDate(String sql,Object ...obj)throws MyException{
       ps=getPreparedStatement(sql,obj);
       try {
    return ps.execute();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    throw new MyException("sql语句出错了"+e.getMessage());
    }finally{
    try {
    ps.close();
    conn.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    throw new MyException("sql语句出错了"+e.getMessage());
    }
    }
       }
    把关闭放在finally里
      

  6.   


    能说具休点吗?或改改我那段代码,小弟新手呀,thks.
      

  7.   


    thks angyinbin:
    通用更新语句方法,关闭是没问题的,我也是这样写的,我问的是通用查询语句。
    现在的问题是如果返回ResultSet,在当前方法中就不能关闭connettion,prepareStatment
    如果返回List的话,此时又不能确定实体类,因为select语句是多变的,难道大家都是在Impl子类中实现关闭的?