2014-04-01 176 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")); 
}