如何从一列中选择不同的类别数据?
Posted
技术标签:
【中文标题】如何从一列中选择不同的类别数据?【英文标题】:How to select different category data from in one colum? 【发布时间】:2015-12-04 19:43:56 【问题描述】:我的数据库中有一个名为product
的表,列有name
price
和category
,有6 个项目与2 个主要类别相关。比方说:
+----------+-------+-----------+
| name | price | category |
+----------+-------+-----------+
| mango | $58 | fruits |
| avocado | $74 | fruits |
| apple | $20 | fruits |
| carrot | $35 | vegetable |
| onions | $40 | vegetable |
+----------+-------+-----------+
我想做2个JComboBox
,先选择一个类别,再选择一个JComboBox
来加载所有相关的名称(如果我选择fruit
,那么其他JComboBox
会显示所有的水果项目)。
这是我的代码,它从数据库中选择所有 name
并将其加载到组合框。
ArrayList<String> list = new ArrayList<String>();
try
DBconnector db = new DBconnector();
con= db.connect();
String qr = "SELECT name FROM product";
PreparedStatement stm = con.prepareStatement(qr);
ResultSet rs = stm.executeQuery(qr);
while(rs.next())
String name = rs.getString("name");
//add group list to the arraylist
list.add(name);
rs.close();
//Populate the comboBox
if(!list.isEmpty())
DefaultComboBoxModel model = new DefaultComboBoxModel(list.toArray());
combItems.setModel(model);
else
System.out.println("List is empty...");
catch (SQLException ex)
System.out.println("Data not retrieved");
ex.printStackTrace();
return list;
有人可以帮帮我吗?
【问题讨论】:
select name from product where category = ?
??您可能想将问题缩小到您遇到问题的部分。使用组合框;编写查询;别的东西……
【参考方案1】:
您有 2 个主要选项:在用户选择类别后,使用所选类别运行带有 where 子句的查询;或创建一个从类别到名称列表的映射,然后使用它来创建您的第二个组合框。
第二个选项看起来像:
Map<String, List<String>> categoryMap = new HashMap<>();
while(rs.next())
List<String> namesForCategory = categoryMap.getOrDefault(rs.getString("category"), new ArrayList<>());
namesForCategory.add(rs.getString("name"));
categoryMap.put(rs.getString("category"), namesForCategory);
现在选择类别后,您可以使用categoryMap.get(name)
获取名称列表。
【讨论】:
【参考方案2】:这使用 where 子句选项和 distinct 并显示如何将两个组合框与项目侦听器连接:
JFrame frm = new JFrame();
JComboBox catBox = new JComboBox();
final Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample","app","app");
String getcatsQuery = "SELECT DISTINCT category from PRODUCT";
PreparedStatement getcatsStatement = con.prepareStatement(getcatsQuery);
ResultSet rs = getcatsStatement.executeQuery();
List<String> list = new ArrayList<>();
while (rs.next())
String cat = rs.getString("category");
//add group list to the arraylist
list.add(cat);
rs.close();
System.out.println("list = " + list);
DefaultComboBoxModel catsModel = new DefaultComboBoxModel(list.toArray());
catBox.setModel(catsModel);
final JComboBox prodBox = new JComboBox();
prodBox.addItem(" ");
catBox.addItemListener(e ->
try
String getprodsQuery = "SELECT name from PRODUCT where category=?";
PreparedStatement getprodsStatement = con.prepareStatement(getprodsQuery);
getprodsStatement.setString(1, catBox.getSelectedItem().toString());
ResultSet rs2 = getprodsStatement.executeQuery();
List<String> list2 = new ArrayList<>();
while (rs2.next())
String name = rs2.getString("name");
//add group list to the arraylist
list2.add(name);
rs.close();
DefaultComboBoxModel prodsModel = new DefaultComboBoxModel(list2.toArray());
prodBox.setModel(prodsModel);
catch (SQLException ex)
ex.printStackTrace();
);
catBox.setSelectedIndex(0);
frm.setLayout(new FlowLayout());
frm.add(catBox);
frm.add(prodBox);
frm.pack();
frm.setVisible(true);
【讨论】:
伟大的工作兄弟它的工作Thnkx很多【参考方案3】:你可能想使用这个query
:
String qr = "SELECT * FROM table_name WHERE category";
我认为你在这方面遇到了麻烦。
【讨论】:
以上是关于如何从一列中选择不同的类别数据?的主要内容,如果未能解决你的问题,请参考以下文章