将数据从 MySQL 加载到 JComboBox

Load data from MySQL into JComboBox

我有两个 MySQL 表,如下图所示

电影

movie_title

         JComboBox combo = new JComboBox();
        combo.setBounds(125, 15, 190, 20);
         try {   
            DatabaseConnection db=new DatabaseConnection();
            Connection connect=db.getConnection();
            String sql="Select title FROM movie_title";
            PreparedStatement ps=connect.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
            String name = rs.getString("title");
            combo.addItem(name);            
        }

    } catch (Exception e) {
        System.out.println("null");
    }
         combo.addActionListener(new ActionListener()
        {
    public void actionPerformed(ActionEvent event)
    {
        JComboBox comboBox=(JComboBox) event.getSource();
         Object selected = comboBox.getSelectedItem();
         displayDay(selected);
    }

    private void displayDay(Object selected) {
        // TODO Auto-generated method stub
         try {  
                combo1.removeAllItems();
                DatabaseConnection db=new DatabaseConnection();
                Connection connect=db.getConnection();
                String sql="Select movie_day FROM movie WHERE movie_title = ?";
                PreparedStatement ps=connect.prepareStatement(sql);
                ps.setObject(1, selected);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                String day = rs.getString("movie_day");
                combo1.addItem(day);   
            }

        } catch (Exception e) {
            System.out.println("null");
        }

    }
        });

我在 comboBox 中实现了 ActionListener。当用户 select 电影 Marvel's Captain America 时,它将从电影中获取 movie_day 项目并加载到 combo1 中。 有没有办法让 combo1 只显示一次 movie_day,即 2016 年 4 月 28 日星期日,而不是两次?

编辑

private void displayDay(Object selected) {
        // TODO Auto-generated method stub
         try {  
                combo1.removeAllItems();
                DatabaseConnection db=new DatabaseConnection();
                Connection connect=db.getConnection();
                String sql="Select movie_day FROM movie WHERE movie_title = ?";
                PreparedStatement ps=connect.prepareStatement(sql);
                ps.setObject(1, selected);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                String day = rs.getString("movie_day");
                DefaultComboBoxModel model = (DefaultComboBoxModel)combo1.getModel();                
                if (model.getIndexOf(day) == -1)
                {
                    combo1.addItem(day);
                }

            }

        } catch (Exception e) {
            System.out.println("null");
        }

Is there a way I can make the combo1 display the movie_day which is Sunday, 28 Apr 2016 one time only instead of two ?

在将日期添加到组合框之前,您需要检查日期是否已经存在。

DefaultComboBoxModel model = (DefaultComboBoxModel)comboBox.getModel();

if (model.getIndexOf(theDate) == -1)
{
    comboBox.addItem( theDate );
}

您也可以将 SQL 语句更改为仅获取 "unique" 日期,但我对 SQL 的了解还不足以为您提供实际的语法。也许这个 SQL Tutorial 会有所帮助,否则你需要找到更好的教程。