如何从存储在数据库中的信息中显示树?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从存储在数据库中的信息中显示树?相关的知识,希望对你有一定的参考价值。

使用嵌套集,可以在关系数据库中存储树。如何显示树,每个节点的关系是否正确?

例如,每个节点的左侧和右侧值都存储在db中。如何根据嵌套集数据在java中显示这个树?如何只显示每个节点的正确层次结构和关系与存储在DB中的信息?如何显示从根到没有子节点的路径,例如A-> B-> D,A-> C,A-> E-> F.

EIDT:

仅基于表中的信息,是否可以显示如下树:

一个

----乙

-------- d

- - C

----è

- - - - F

谢谢。

答案

假设你有一个如下课程:

class MyNode
{
    public int id; // these could (should?) be made private with getter/setter methods
    public String value;
    public int lft;
    public int rgt;
}

使用它你可以做这样的事情:

ArrayList<MyNode> nodes = new ArrayList<MyNodes>();
// add SQL code to load values from DB
// make sure to load the nodes sorted by their lft values.
for ( int c = 0; c < nodes.size(); c++ )
{
    String result = createNodeListFor(nodes.elementAt(c), nodes);
    if ( result != null )
    {
        System.out.println(result);
    }
}

遗漏的方法:

public String createNodeListFor( MyNode endNode, ArrayList<MyNodes> nodes )
{
    String result = "";
    // Again, this assumes the nodes are sorted by 'lft'
    for ( int i = 0; i < nodes.size(); i++ )
    {
        MyNodes current = nodes.elementAt(i);
        if ( current.id == endNode.id )
            continue; // skip self test
        if ( current.lft < endNode.lft && current.rgt > endNode.rgt )
        {
            if ( result == null )
                result = current.value;
            else
                result += "->" + current.value;
            continue;
        }
        if ( current.lft < endNode.lft && current.rgt < endNode.rgt )
        {
            return null; // this node is not an end node
        }
        if ( current.lft > endNode.lft )
        {
            break; // assuming the list is correctly sorted, we don't need to check any more nodes
        }
    }
    return result;
}

这样的事可能有用......祝你好运;)

以上是关于如何从存储在数据库中的信息中显示树?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表视图中的数据从一个片段发送到另一个片段

如何从 Firebase 获取数据到 Recyclerview 中的片段?

如何将数据从 BottomSheetDialogFragment 返回到父片段

如何从一个片段中删除数据,这些片段应该反映在google firebase中的其他片段中

如何从片段中检索gridview中的图像?

如何在kotlin的片段内显示网格视图?