如何检索数据库值并将其存储为树数据结构?

时间:2015-02-24 10:54:43

标签: java arraylist collections tree hierarchical-data

我在DB中有一些值如下 这里父节点是父节点,子节点是子节点。

gid      parent    child    clientid

1         ABC       ABC       1
2         ABC       PQR       1
3         PQR        c1       1
4         PQR        c2       1
5         PQR        c3       1
6         ABC       XYZ       1
7         XYZ       EFG       1
8         EFG        c4       1
9         EFG        c5       1

这是一棵树的数据,这里为我的计算,如果父和子是相同的,我把它作为树的根。

我创建了自己的树数据结构来存储所有值,

public class Tree<T> {

   private T head;

   private ArrayList<Tree<T>> leafs = new ArrayList<Tree<T>>();

   private Tree<T> parent = null;

   private HashMap<T, Tree<T>> locate = new HashMap<T, Tree<T>>();

   public Tree(T head) {
       this.head = head;
       locate.put(head, this);
   }
}

我有addleaf()方法用于向树添加节点。 Tree工作正常。问题是我必须从数据库中检索数据并将其存储在Tree类型中。因为我已经这样做了。

 Tree<String> t=null;
 Statement s = conn.createStatement();
 ResultSet rs = s.executeQuery("select * from bus_serverdb.groupdet    where client_id='"+ uid + "'");
 while (rs.next()) {         
     String parent = rs.getString("parent");
     String child = rs.getString("child");   
     if(parent.equals(child)) {
        t=new Tree<String>(parent);//creates new tree with parent as root node
     }
 }

所以现在我被困在这里,我没有得到如何遍历数据库数据并将其添加到Tree类型。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

如果您可以获取由父组分组的(父,子)值,则while (rs.next())循环内的初始化逻辑为:

  • 阅读(父母,孩子)
  • 在树中找到节点
  • 所有(父母,孩子)
  • 具有相同的父母
    • 创建新的子节点并将其添加到父节点
    • (子值,子节点)添加到助手location

Tree课程中,我会分隔保存根节点的TreeNode类,其中孩子(类型List<Node<T>>)。

另外,我认为locate hashmap应该是Tree的一部分,而不是Node的一部分。我认为它是一个辅助函数,可以快速找到Node的名称,将节点名称视为唯一。