【问题标题】:radio button show values in combo box单选按钮在组合框中显示值
【发布时间】:2015-07-15 01:27:51
【问题描述】:

我对这个 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;

当我点击饮料/食物时,该类别仍然是饮料的类别。

数据库

任何帮助将不胜感激!

【问题讨论】:

  • 那么您执行了哪些调试步骤?
  • type_id = TYO2 应该是 type_id = 'TYO2' 等等。
  • 你能发布你的表定义吗?看起来您的表“menu_cat”中有一个列“menu_cat”,至少您正在尝试访问该列的值
  • 如果您是 Java 新手,您应该先学习基础知识。对上面代码的一个很大的改进:把这个 -catch (Exception e) { } 变成这个: -catch (Exception e) { e.printStackTrace();在您当前的代码中,无论出现什么问题,您永远不会知道,因为您吞下了异常。
  • 首先尝试调试看看,如果你的查询实际上是返回适当的值,如果有效,则需要调用repaint方法,实际上是刷新部分

标签: java mysql if-statement netbeans radio-button


【解决方案1】:

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

发布构造函数后

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

所以,我建议您从rbMFoodActionPerformedrbMDrinkActionPerformed 方法调用showCategory()。我希望这能解决您的问题。

还要在Statement stmt; 之前添加cmbMCat.removeAllItems() 以删除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();
}

【讨论】:

  • 等等。我的列和表名相同。对不起让你困惑>
  • 你能发布你的列名吗?还有一个更好的查询是SELECT menu_cat FROM menu_cat WHERE type_id = 'TYO2'
  • 啊。那么,showCategory() 在构造函数中我删除它了吗?
  • 如果您最初不想填充comboBox,请删除它,否则保留它
  • 我已经测试过了。是的。是成功。但是当我点击其他(饮料)时,值仍然是最后一个(食物)。
猜你喜欢
  • 1970-01-01
  • 2013-02-25
  • 2011-11-03
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多