如何在 mysql 中选择多个相同数据之一并在 jComboBox java 中查看?

Posted

技术标签:

【中文标题】如何在 mysql 中选择多个相同数据之一并在 jComboBox java 中查看?【英文标题】:how to select one of several same data in mysql and view in jComboBox java? 【发布时间】:2017-02-03 07:30:00 【问题描述】:

我在 MyDatabase01 上有一个 table01

注意:在netbeans中,id=jTextField1,day=jComboBox1,month=jComboBox2,year=jComboBox3

+=================================+
|id   |day      |month    |year   |
+=================================+
|A1   |monday   |january  |2016   |
|A2   |monday   |january  |2017   |
|A3   |sunday   |february |2016   |
|A4   |sunday   |march    |2016   |
|A5   |monday   |july     |2016   |
+=================================+

以及,如何选择一月和七月之一,其中周一是哪一天?像这样

+=========+
|month    |
+=========+
|january  |
|july     |
+=========+

那么,如何选择 2016 年和 2017 年的年份是星期一?像这样

+=======+
|year   |
+=======+
|2016   |
|2017   |
+=======+

之后,我想在 jComboBox java netbeans 中查看月份和年份,这是我的代码

月份源代码

try 
        connectDB();
        jComboBox2.removeAllItems();
        String sql = "SELECT * FROM table01 WHERE day='"+jComboBox1.getSelectedItem()+"' UNION SELECT * FROM table01 WHERE day='"+jComboBox1.getSelectedItem()+"'"; 
//not work.always show all data, not january and july.
        ResultSet res = stat.executeQuery(sql);

        while (res.next()) 
            String val = res.getString("month");
            jComboBox2.addItem(val);
        
     catch (Exception e) 
        JOptionPane.showMessageDialog(null, e);
    

当年的源代码

try 
        connectDB();
        jComboBox3.removeAllItems();
        String sql = "SELECT * FROM table01 WHERE month='"+jComboBox2.getSelectedItem()+"' AND day='"+jComboBox1.getSelectedItem()+"'"; 
//not work. always show all data, not 2016 and 2017.
        ResultSet res = stat.executeQuery(sql);

        while (res.next()) 
            String val = res.getString("year");
            jComboBox3.addItem(val);
        
     catch (Exception e) 
        JOptionPane.showMessageDialog(null, e);
    

谢谢你的帮助。

【问题讨论】:

【参考方案1】:

尝试如下。它会按您的预期返回。

月份源代码

   String sql = "SELECT DISTINCT(month) FROM table01 WHERE day='"+jComboBox1.getSelectedItem()"';

            ResultSet res = stat.executeQuery(sql);

            while (res.next()) 
                String val = res.getString(0);
                jComboBox2.addItem(val);
            

当年的源代码

 String sql = "SELECT DISTINCT(year) FROM table01 WHERE month='"+jComboBox2.getSelectedItem()+"' AND day='"+jComboBox1.getSelectedItem()+"'"; 

        ResultSet res = stat.executeQuery(sql);

        while (res.next()) 
            String val = res.getString("0");
            jComboBox3.addItem(val);
        

【讨论】:

你不应该写month='"+jComboBox2.getSelectedItem()+"',因为这会进行sql注入,你应该写month=?并使用prepareStatement来执行那个sql。 @Numb :这里查询被调用一次,因此使用 SQL 的正常语句。我们也可以使用prepareStatement,但是当一个特定的查询要被多次执行时,通常首选PreparedStatement。【参考方案2】:

你可以使用这个命令:

select distinct(yourtable.month) from yourtable where UPPER(yourtable.day) = UPPER('monday')

【讨论】:

以上是关于如何在 mysql 中选择多个相同数据之一并在 jComboBox java 中查看?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 从具有相同结构但数据不同的多个表中选择数据

如何使用 MYSQL 中的连接从多个表中获取多个列并在非空列上显示数据以及在空列上显示 null 或零

Spring Boot:如何使用多个模式并在运行时动态选择使用哪一个

选择可能具有相同值的行的多个实例

如何分解数据库中的值并在选择查询中使用它?

如何从多个表中选择列并在 yii 框架中显示