Java 如何从一个列中选择不同的类别数据?

Java 如何从一个列中选择不同的类别数据?,java,mysql,swing,jdbc,Java,Mysql,Swing,Jdbc,我的数据库中有一个名为产品的表,表中有名称价格和类别,其中有6个项目与两个主要类别相关。比如说: +----------+-------+-----------+ | name | price | category | +----------+-------+-----------+ | mango | $58 | fruits | | avocado | $74 | fruits | | apple | $20 | fruits | |

我的数据库中有一个名为
产品
的表,表中有
名称
价格
类别
,其中有6个项目与两个主要类别相关。比如说:

+----------+-------+-----------+
|  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;
ArrayList list=new ArrayList();
试一试{
DBconnector db=新的DBconnector();
con=db.connect();
String qr=“从产品中选择名称”;
准备好的报表stm=con.准备好的报表(qr);
结果集rs=stm.executeQuery(qr);
while(rs.next()){
字符串名称=rs.getString(“名称”);
//将组列表添加到arraylist
列表。添加(名称);
}
rs.close();
//填充组合框
如果(!list.isEmpty()){
DefaultComboxModel=新的DefaultComboxModel(list.toArray());
combItems.setModel(model);
}否则{
System.out.println(“列表为空…”);
}
}catch(SQLException-ex){
System.out.println(“未检索数据”);
例如printStackTrace();
}
退货清单;

有人能帮我吗?

您有两个主要选项:用户选择类别后,使用所选类别运行带有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);
}
Map categoryMap=newhashmap();
while(rs.next()){
List namesForCategory=categoryMap.getOrDefault(rs.getString(“category”),new ArrayList());
namesForCategory.add(rs.getString(“name”);
categoryMap.put(rs.getString(“类别”),namesForCategory);
}

现在,在选择类别后,您可以使用
categoryMap.get(name)

获取名称列表。这将使用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);
JFrame frm=newjframe();
JComboBox-catBox=新JComboBox();
最终连接con=DriverManager.getConnection(“jdbc:derby://localhost:1527/sample“,”应用程序“,”应用程序“);
String getcatsQuery=“从产品中选择不同的类别”;
PreparedStatement getcatsStatement=con.prepareStatement(getcatsQuery);
ResultSet rs=getcatsStatement.executeQuery();
列表=新的ArrayList();
while(rs.next()){
字符串cat=rs.getString(“类别”);
//将组列表添加到arraylist
列表。添加(cat);
}
rs.close();
System.out.println(“list=“+list”);
DefaultComboxModel catsModel=新的DefaultComboxModel(list.toArray());
catBox.setModel(catsModel);
最终JComboBox prodBox=新JComboBox();
prodBox.addItem(“”);
catBox.addItemListener(e->{
试一试{
String getprodsQuery=“从产品中选择名称,其中类别=?”;
PreparedStatement GetProdStatement=con.prepareStatement(getprodsQuery);
getprodsStatement.setString(1,catBox.getSelectedItem().toString());
ResultSet rs2=getprodsStatement.executeQuery();
List list2=新的ArrayList();
while(rs2.next()){
字符串名称=rs2.getString(“名称”);
//将组列表添加到arraylist
列表2.添加(名称);
}
rs.close();
DefaultComboxModel prodsModel=新的DefaultComboxModel(list2.toArray());
prodBox.setModel(prodsModel);
}catch(SQLException-ex){
例如printStackTrace();
}
});
catBox.SETSELECTED指数(0);
frm.setLayout(新的FlowLayout());
frm.添加(猫箱);
frm.add(prodBox);
frm.pack();
frm.setVisible(真);

您可能希望使用此
查询

String qr = "SELECT * FROM table_name WHERE category";

我认为您在这方面遇到了问题。

从产品中选择名称,其中category=?
??你可能想把你的问题缩小到你遇到麻烦的地方。使用组合框;编写查询;还有一些…很棒的工作,兄弟,它工作了很多