我对if-else感到困惑,因为我是Java和MySQL的新手,所以我尝试自己制作。

public Menu() {
        initComponents();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/restaurant", "root", "");
            System.out.println("ODBC Connection Successful");

            showCategory();

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println("ODBC Connection Failed" + e);

        }
    }


如果别的

private void showCategory() {
        try {
            Statement stmt;
            stmt = con.createStatement();

            if (rbMFood.isSelected()) {
            ResultSet rs = stmt.executeQuery("SELECT * FROM menu_cat WHERE type_id = 'TY02'");
            while (rs.next()) {
                cmbMCat.addItem(rs.getString("menu_cat"));
            }

        } else {
            ResultSet rs = stmt.executeQuery("SELECT * FROM menu_cat WHERE type_id = 'TY01'");
            while (rs.next()) {
                cmbMCat.addItem(rs.getString("menu_cat"));
            }

            }
        } catch (Exception e) {

        }
    }


单选按钮

private void rbMFoodActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        type = "Food";
    }

    private void rbMDrinkActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        type = "Drink";
    }


我在程序结尾声明了函数

private String type;


当我单击饮料/食品时,类别仍是饮料的类别。



数据库



任何帮助将不胜感激!

最佳答案

您正在使用rs.getString("menu_cat"),但是格式为rs.getString(<Column Name>),但是您正在使用rs.getString(<Table Name>),因为“ menu_cat”是表的名称,而不是列的名称。

发布后的建设者

我从发布的代码中看到的是,您在构造函数中调用了showCategory()。此方法负责填充JComboBox cmbMCat。现在,在创建新的cmbMCat时将填充Menu。之后,cmbMCat的项目列表不会更改。

因此,我建议您从showCategory()rbMFoodActionPerformed方法调用rbMDrinkActionPerformed。我希望这能解决您的问题。

还要在cmbMCat.removeAllItems()之前添加Statement stmt;,以删除cmbMCat中存在的所有项目,并使用新的项目列表将其重置。

关于if-else的评论后

如下更改showCatagory()

private void showCategory() {
        cmbMCat.removeAllItems();
        try {
            PreparedStatement stmt; //Used Prepared statement
            String sql = "SELECT * FROM menu_cat WHERE type_id = ?";
            stmt = con.prepareStatement(sql);

            if (type.equals("Drink")) {
                stmt.setString("TY01");
            } else {
                stmt.setString("TY02");
            }
                ResultSet rs = stmt.executeQuery();
                while (rs.next()) {
                    cmbMCat.addItem(rs.getString("menu_cat"));
                }

            }
        } catch (Exception e) {

        }
    }


另请注意,您的eventListener代码应为:

private void rbMFoodActionPerformed(java.awt.event.ActionEvent evt){
    type = "Food";
    showCategory();
}

private void rbMDrinkActionPerformed(java.awt.event.ActionEvent evt){
    type = "Drink";
    showCategory();
}

07-26 08:15