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