在 Java JTree 上显示数据库中的数据

Displaying data from the database on Java JTree

我有一个数据库,其中有两列名为 colNode,colLeaf

当我从数据库读取数据并显示在JTree上时

while (resultSet.next()) {
            DefaultMutableTreeNode url = new DefaultMutableTreeNode(resultSet.getString("colNode"));
            mutableTreeNode.add(url);
            url.add(new DefaultMutableTreeNode(resultSet.getString("colLeaf")));
        }

我想如果该值已经存在于 JTree colNode 上,那么 colLeaf 将附加到 the.I 想要获得图 2 中的结果 请帮助我

当前输出:

期望的输出:

我假设你的意思是,你想将所有 colLeaf 与相同的 colNode 分组?

我会先做以下两件事之一,或者使用 SQL 分组 and/or 按 colNode 对结果进行排序,这样你就可以监控当前的 "group",当它改变时,创建一个新的 TreeNode

类似...

DefaultMutableTreeNode rootNode = ...;
DefaultMutableTreeNode groupNode = null;
String currentGroup = null;
while (resultSet.next()) {
    String group = resultSet.getString("colNode");
    if (currentGroup == null || !currentGroup.equals(group)) {
        currentGroup = group;
        group = new DefaultMutableTreeNode(group);
        rootNode.add(groupNode);
    }
    group.add(new DefaultMutableTreeNode(resultSet.getString("colLeaf")));
}

例如。

或者,使用某种 Map,将所有 colNode 值映射到同一键下 (colLeaf)

Map<String, List<String>> mapGroups = new HashMap<>(25);
while (resultSet.next()) {
    String group = resultSet.getString("colNode");
    List<String> members = mapGroups.get(group);
    if (members == null) {
        members = new ArrayList<>(25);
        mapGroups.put(group, members);
    }
    members.add(resultSet.getString("colLeaf"));
}

然后您将使用 mapGroups 根据 key/value 组生成您的 TreeNode

例如。

就我个人而言,我认为第一个选项更有效,但可能需要更复杂的查询,第二个选项更慢并且需要更多开销,但是以类似于您尝试的方式对数据建模实现