如何检索数据库值并将其存储为树数据结构?
问题描述:
我在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
}
}
所以,现在我在这里停留,我没有得到如何通过DB数据遍历并将其添加到Tree
类型。任何人都可以帮助我。
答
如果能够获取(父母,子女),父母分组值,则while (rs.next())
循环内初始化的逻辑是:
- 读(父母,子女)对
- 找到父节点树
- 所有(父母,子女)具有相同父母
- 创建一个新的子节点并将其添加到父节点
-
(子值,子节点)添加到助手
location
在你Tree
类,我会分开持有根节点的Tree
和Node
类,其中值为,父母和儿童(类型List<Node<T>>
)。
此外,我认为locate
散列映射应该是Tree
的一部分,但不是Node
。我认为它是一个帮助函数,通过名称快速找到Node
,并将节点名称视为唯一。
+0
可以请你展示一些代码片段 – Raghu 2015-02-26 09:25:46
你真的在DB中有'parent = ABC,child = ABC'吗? – 2015-02-24 11:05:20
没有行,这是DB中的第一行 – Raghu 2015-02-24 11:06:59
是的,对不起,我还没有读完。 “ABC”是树的根。 – 2015-02-24 11:09:19