本帖最后由 java2000_net 于 2008-08-05 17:59:23 编辑

解决方案 »

  1.   

    难道列出了10多次相同的吗?那就是你的new 写在了循环的外面了。每次放到list里面的都是同一个对象
    或者,你的SQL写错了
      

  2.   

    (`id`,`name`,`parentid`) public void findAll(List<User> users, int id) {
      Connection conn = null;
      PreparedStatement pstmt = null;
      String sql = "select * from user where id = ?";
      ResultSet rs = null;
      try {
        Class.forName("com.mysql.jdbc.Driver");......
        conn = DriverManager........;
        pstmt = conn......(sql);
        pstmt.setInt(1, id);
        rs = pstmt.executeQuery();
        while(rs.next) {
          User user = new User();
          user.setId(rs.getInt("id"));
          user.setString(rs.getString("name"));
          user.setInt(rs.getInt("pid"));
          users.add(user);
          if(haveChild(rs.getInt("id")) {
            findAll(users, rs.getInt("id"));
          }
        }
      }
    }
    private boolean haveChild(int id) {
      "select count(*) from user where pid = " + id;
      if(查到结果)返回true;
      else 返回false;
    }
    方法封装的不太好,如果好一点可以再加一个方法,一共三个方法,一个做递归,一个做结果返回,一个做是否有子记录的判断。
      

  3.   

    public Show(table,id){
        ResultSet result = stmt.executeQuery("select * from "+table+" where parentid="+pid);
        while(result.next()){
            id=result.getInt("id");
            name=result.getString("name");
            li += name+"\r\n";
            li += Show(table,id); //递归
        }
        return li;
    }
    这是我的递归程序  麻烦大家看看是那出问题了开始发的没有显示  不知道怎么回事...
      

  4.   

    看递归程序 每次都会去创建一个新的resultset,也就是说 每次递归 resultset都会被初始化一次
    所以就会选择出来无数次的第一条记录
    可以改写一下
    .....class XXX{
    private static ResultSet result = null;public XXX(){
      result = stmt.executeQuery("select * from "+table+" where parentid="+pid);
    }public Show(table,id){
        ResultSet result = stmt.executeQuery("select * from "+table+" where parentid="+pid);   
        while(result.next()){
            id=result.getInt("id");
            name=result.getString("name");
            li += name+"\r\n";
            li += Show(table,id); //递归
        }
        return li;
    }