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=?
??你可能想把你的问题缩小到你遇到麻烦的地方。使用组合框;编写查询;还有一些…很棒的工作,兄弟,它工作了很多