JavaFX:使用来自MySQL数据库的数据填充ComboBox,StringConverter打破了组合框

时间:2016-09-16 20:45:33

标签: java javafx combobox fxml

我有一个ComboBox,我想用数据库填充数据。使用以下代码,ComboBox中显示的数据是值的ID,而不是string值。

(部分)Java控制器代码:

@FXML
    ComboBox studentPicker;
@Override
    public void initialize(URL url, ResourceBundle rb) {
        String dbUsername = "root";
        String dbPassword = "x";
        String dbURL = "jdbc:mysql://localhost:3306/uia";
        try {
            Connection conn = DriverManager.getConnection(dbURL, dbUsername, dbPassword);
            data = FXCollections.observableArrayList();
            // Execute query and store result in a resultset
            ResultSet rs = conn.createStatement().executeQuery("SELECT username FROM user WHERE userrole='STUDENT';");
            while (rs.next()) {
                //get string from db,whichever way 
                data.add(new User(rs.getString("username")));
            }

        } catch (SQLException ex) {
            System.err.println("Error"+ex);
        }

        studentPicker.setItems(null);
        studentPicker.setItems(data);
    }

我试过的StringConverter是从How to import database data into combo box in javafx获取的,但这导致了ComboBox的错误。请参见下图:左侧图像是应该如何,右图是将StringConverter添加到代码中的方式。

How it is supposed to be How it is when adding the StringConverter below to the code

studentPicker.setConverter(new StringConverter<User>() {

        @Override
        public String toString(User object) {
            return object.getName();
        }

        @Override
        public User fromString(String string) {
            // TODO Auto-generated method stub
            return null;
        }
    });

我想要显示的是从数据库收集的用户名,但会显示ID,如“is20x.User@4b6ca8f7”。 我非常感谢任何有关如何解决这个问题的建议。

2 个答案:

答案 0 :(得分:2)

回答我的评论。

您正在为new User("username")数组添加data,这就是为什么您会获得一个奇怪的字符串,它是特定User的ID。

如果data.add(new User(rs.getString("username")).getUserName());类有User方法,请尝试执行getUserName()

这可能会破坏你想要做的事情,因为我假设你在这里使用data更多。最好制作另一个变量并在其中存储comboBox字符串。像

这样的东西
//Init same place data is
comboString = FXCollections.observableArrayList(); //Declared somewhere else
data.add(new User(rs.getString("username")));
comboString.add(rs.getString("username"));

答案 1 :(得分:0)

我想分享我为从MySQL数据库自动设置数据所做的工作。 (非常简单)

        // first I execute the query that select name of department one by one
        resultSet = statement.executeQuery("Select name from department");

        while (resultSet.next()) {  // loop

           // Now add the comboBox addAll statement 
            comboBox.getItems().addAll(resultSet.getString("name")); 
       }

请注意,最后一行的“名称”字段的拼写与MySQL表中列的名称完全相同。