2014-04-01 143 views
0

动态菜单和子菜单我在我的数据库,即菜单和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>>,但无法正确显示!

`

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

回答

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

希望它可以帮助

+0

非常感谢你......它的工作..现在我知道..我的代码有什么问题......再次感谢! –

1

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

+0

你能否给我提供一个例子或任何教程?万分感谢 ! –

+0

将您的代码发布到要添加字符串的地方,然后我会看一看。 – Thom

+0

谢谢你的关心......但我的代码现在可以工作.. :) –

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