如何让查询出来的数据集返回成ARRAYLIST哦各位,帮帮我

解决方案 »

  1.   

    ArrayList smallList=new ArrayList();
    ArrayList biggerList=new ArrayList();
    while(rs.next){
    smallList.clear();
      smallList.add(rs.getString(""))
    ...
    ...
    Object[] obj=new Object[smallList.size()];
    smallList.array(obj);
    biggerList.add(obj);}
    return biggerList;
      

  2.   

    public static Collection getXXXX()
    throws ServiceException {
    Statement sqlStrStmt = null;
    ResultSet rs = null;
    Connection con = xxx.getConnection();
    Collection lst = new ArrayList();
    try {
    String strSql = "select * from table";
    sqlStrStmt = con.createStatement();
    rs = sqlStrStmt.executeQuery(strSql);
    while (rs.next()) {
    lst.add(new Integer(rs.getInt("XXX")));
    }
    rs.getStatement().close();
    } catch (SQLException e) {
    ...
    } finally {
    if (con != null) {
    try {
    con.close();
    } catch (SQLException e) {
    ...
    }
    }
    }
    return lst;
    }
      

  3.   

    to 樓主:
       這樣的描述ok嗎?
       
       簡而言之,就是把resultset中的值提取出來,放到數組中,然後再把數組放到arrayList中..
      

  4.   

    你可以定义一个bean,bean的属性就是你resultset中的各个字段,然后循环rs,读取数据,每一行数据生成一个bean对象,放入ArrayList不就行了。当然上面的工作已经有人做了,就是apache下的commons/beanutils子项目中有一个RowSetDynaClass类具体的使用方法:
       Connection conn = ...;  // Acquire connection from pool
       Statement stmt = conn.createStatement();
       ResultSet rs = stmt.executeQuery("SELECT id,name from users");
       RowSetDynaClass rsdc = new RowSetDynaClass(rs);
       rs.close();
       stmt.close();
       ...;                    // Return connection to pool
       List rows = rsdc.getRows();
       ...;                   // Process the rows as desired
    for(java.util.Iterator i=rows.iterator();i.hasNext();)
    {
    org.apache.commons.beanutils.DynaBean bean=(org.apache.commons.beanutils.DynaBean)i.next();
    System.out.println("id: "+bean.get("id")+", name: "+bean.get("name"));
    }
      

  5.   

    BeanUtils包可以在这里down:
    http://archive.apache.org/dist/jakarta/commons/beanutils/binaries/你可以选择不同的版本,建议选择1.6以上http://archive.apache.org/dist/jakarta/commons/beanutils/binaries/commons-beanutils-1.6.1.zip
      

  6.   


    public final Collection<SpInfoForm> listAllCodeTest() {
    ArrayList<SpInfoForm> list = new ArrayList();
    String sql = "select spName,spID from spinfo";
    try {
    Connection conn = dbmAuth.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    System.out.println(sql);
    while (rs.next()) {
    SpInfoForm sf = new SpInfoForm();
    sf.setSpName(rs.getString(1));
    sf.setSpID(rs.getString(2)); System.out.println(rs.getString(1));
    list.add(sf);
    }
    dbmAuth.closeConn(conn, stmt, rs);
    } catch (SQLException e) {
    e.printStackTrace();
    } return list;
    }
      

  7.   

    通用方法接收一个sql语句 返回一个装有LinkedHashMap的ArrayList集合 其中LinkedHashMap的KEY为数据库字段名 VALUE为该字段的值public static ArrayList delRes(String sql) {
      ArrayList<LinkedHashMap> list = new ArrayList<LinkedHashMap>();
      Connection conn = null;
      PreparedStatement stmt = null;
      ResultSetMetaData metaData=null;
      try {
        conn = ConDB.getCon();
        stmt = (PreparedStatement) conn.prepareStatement(sql);
        ResultSet result = stmt.executeQuery();
        metaData=result.getMetaData();
        while (result.next()) {
    LinkedHashMap v = new LinkedHashMap();
    for (int i = 1; i <= metaData.getColumnCount(); i++)
      v.put(metaData.getColumnLabel(i),result.getObject(i));
    list.add(v);
        }
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        try {
    if (stmt != null) {
       stmt.close();
    }
    if (conn != null) {
       conn.close();
    }
        } catch (SQLException e) {
    e.printStackTrace();
        }
      }
      return list;
    }
      

  8.   

    或者这样假设有一个NewsAddBean具有news_id和news_title以及他们相应的set和get方法
    传入一个sql语句取出数据库的字段news_id和news_title的值 调用set方法存入NewsAddBean
    public ArrayList<NewsAddBean> listNews(String sql){
      try{
    con = ConDB.getCon();
    Statement stmt2 = null;
       ResultSet result2 = null;
       stmt = con.createStatement();
    result = stmt.executeQuery(sql);
    while(result.next()){
      NewsAddBean NOset=new NewsAddBean();
      NOset.setNews_id(result.getString("news_id"));
      NOset.setNews_title(Utils.strLong(result.getString("news_title"));
               list.add(NOset);

       }catch(Exception e){
    e.printStackTrace();
       }finally {
    try {
       if (result != null ) {
    result.close();
       }
       if (stmt != null) {
    stmt.close();
       }
       if (con !=null ) {
    con.close();
       }
    } catch (SQLException ex) {
    System.out.println(ex.getMessage());
    }
          } 
          return list;
    }
      

  9.   

    上面2种方法不同的是 
    第一个方法是 返回一个LinkedHashMap的ArrayList集合 比较适于用JSF框架之类的页面迭代方法显示 而且受数据库的影响 
    第二个方法是 返回一个装有固定Bean的ArrayList集合 比较适合普通MVC在页面生成Bean对象进行迭代方法显示 但是比较有局限性 只能针对某个Bean进行操作 而且还要自己手动set
      

  10.   

    回楼主我所做的项目和我所看到的项目 如果是用java进行数据库操作的话 基本都是这样做 都是返回结果集 然后第一种是通过JSF自带的标签进行迭代输出 第二种是自己在页面上生成bean对象进行迭代输出 我上面对2个方法分别应用的方面做出了解释 不过第一个方法是不受表里字段的限制的 少打个不字 呵呵 集合的速度挺快的 尤其在数据库结果集的应用方面 楼主不用担心
      

  11.   

    要用到2个ArrayList。
    也就是说返回的ArrayList中的每一项也是一个ArrayList.
      

  12.   

    public static Collection getXXXX()
    throws ServiceException {
    Statement sqlStrStmt = null;
    ResultSet rs = null;
    Connection con = xxx.getConnection();
    Collection lst = new ArrayList();
    try {
    String strSql = "select * from table";
    sqlStrStmt = con.createStatement();
    rs = sqlStrStmt.executeQuery(strSql);
    while (rs.next()) {
    lst.add(new Integer(rs.getInt("XXX")));
    }
    rs.getStatement().close();
    } catch (SQLException e) {
    ...
    } finally {
    if (con != null) {
    try {
    con.close();
    } catch (SQLException e) {
    ...
    }
    }
    }
    return lst;
    }