Java 从数据库生成动态菜单和子菜单

Java 从数据库生成动态菜单和子菜单,java,jsp,servlets,Java,Jsp,Servlets,我的数据库中有两个表,即菜单和子菜单。。。我使用连接查询从这两个表中检索了数据,结果如下 `SELECT menu.menu_name AS menu_name, sub_menu.sub_menu_name FROM menu LEFT JOIN user_category ON menu.user_category_id = user_category.user_category_id LEFT JOIN sub_menu ON menu.menu_id = sub_menu.menu_id

我的数据库中有两个表,即菜单和子菜单。。。我使用连接查询从这两个表中检索了数据,结果如下

`SELECT menu.menu_name AS menu_name, sub_menu.sub_menu_name FROM menu LEFT JOIN user_category ON menu.user_category_id = user_category.user_category_id LEFT JOIN sub_menu ON menu.menu_id = sub_menu.menu_id WHERE user_category.user_category_name = "Normal";`
在此之后,我使用
LinkedHashMap
存储结果。现在,问题出现了。当我打印输出时,仅显示复制键的最后一个值,而忽略其他值。。。我要显示的是一个具有多个值的唯一键。。我已经用
LinkedHashMap
试过了,但没法正确使用

`

LinkedHashMap菜单菜单=新建LinkedHashMap()`
`ArrayList子菜单=null`
`字符串键=null`
while(rs.next()){
key=rs.getString(“菜单名称”);
if(key.equals(rs.getString(“菜单名”)){
key=rs.getString(“菜单名称”);
子菜单=新建ArrayList();
添加(rs.getString(“子菜单名”);
}否则{
子菜单=空;
}
菜单菜单放置(键,子菜单);
}

我想问题在于你把数据放在地图的什么地方,而不是放在哪里。您需要确保在创建新的数组列表后将数组列表放回映射,并且在下次遇到该单词时将数组列表拉回映射。

对不起,您编写的示例有点混乱,但您可以尝试以下方法:

LinkedHashMap<String, ArrayList<String>> menuSubMenu = new LinkedHashMap<String, ArrayList<String>>();

        while(true){
            String key = rs.getString("menu_name");
            if(!menuSubMenu.containsKey(key)){
                menuSubMenu.put(key, new ArrayList<String>());
            }
            menuSubMenu.get(key).add(rs.getString("sub_menu_name"));
        }
LinkedHashMap菜单菜单=新建LinkedHashMap();
while(true){
字符串键=rs.getString(“菜单名称”);
如果(!menuSubMenu.containsKey(键)){
menuSubMenu.put(key,new ArrayList());
}
menuSubMenu.get(key).add(rs.getString(“子菜单名”);
}
希望它有帮助

我同意您必须检查Hashmap中已有的条目:

LinkedHashMap<String, ArrayList<String>> menuSubMenu = new LinkedHashMap<String, ArrayList<String>>();

while (rs.next()) {
    final String            key     = rs.getString("menu_name");
    final ArrayList<String> subMenu = menuSubMenu.get(key);

    if (subMenu == null) {
        subMenu = new ArrayList<String>();
        menuSubMenu.put(key, subMenu);
    }


    subMenu.add(rs.getString("sub_menu_name"));
}
LinkedHashMap菜单菜单=新建LinkedHashMap();
while(rs.next()){
最终字符串键=rs.getString(“菜单名称”);
最终ArrayList子菜单=菜单菜单.get(键);
如果(子菜单==null){
子菜单=新建ArrayList();
菜单菜单放置(键,子菜单);
}
添加(rs.getString(“子菜单名”);
}

你能给我举个例子或任何教程吗??非常感谢!在添加字符串的地方发布代码,我会看一看。感谢您的关注。。。但我的代码现在起作用了……)非常感谢你。。。它起作用了。。现在我知道了。。我的代码有什么问题。。。再次感谢!!!
LinkedHashMap<String, ArrayList<String>> menuSubMenu = new LinkedHashMap<String, ArrayList<String>>();

while (rs.next()) {
    final String            key     = rs.getString("menu_name");
    final ArrayList<String> subMenu = menuSubMenu.get(key);

    if (subMenu == null) {
        subMenu = new ArrayList<String>();
        menuSubMenu.put(key, subMenu);
    }


    subMenu.add(rs.getString("sub_menu_name"));
}