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

时间:2014-04-01 10:38:16

标签: java jsp servlets

我的数据库中有两个表,即Menu和Sub_Menu ...我已经使用JOIN查询从这两个表中检索了数据,它看起来像这样

`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<String, String>来存储结果。现在,问题在这里上升。当我打印输出时,重复键的最后一个值只显示,其他值被省略...我想要显示的是一个具有多个值的唯一键..我已经尝试使用LinkedHashMap<String, ArrayList<String>>但是可以&# 39;做对了!!!

`

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

`ArrayList<String> subMenu = null;`

`String key = null;`

            while (rs.next()) {
                key = rs.getString("menu_name");

                if (key.equals(rs.getString("menu_name"))) {
                    key = rs.getString("menu_name");
                    subMenu = new ArrayList<String>();
                    subMenu.add(rs.getString("sub_menu_name"));
                } else {
                    subMenu = null;
                }

                menuSubMenu.put(key, subMenu);
            }

3 个答案:

答案 0 :(得分:1)

我猜你的问题就在于你将数据放入地图而不是把它拿出来的地方。在创建新数组后,您需要确保将数组列表放回到地图中,并且在下次遇到该单词时将数组列表拉回来。

答案 1 :(得分:1)

很抱歉,但您的代码示例有点令人困惑,但您可以尝试这种方式:

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"));
        }

希望有所帮助

答案 2 :(得分:0)

我必须同意The Thom您必须检查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"));
}