JavaFX:使用 MySQL 数据库中的数据填充 ComboBox,StringConverter 破坏组合框
JavaFX: Populating a ComboBox with data from a MySQL Database, StringConverter breaking the combobox
我有一个 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
是从 中提取的,但这导致了 ComboBox 的错误。见下图:左图是应该的样子,右图是将 StringConverter 添加到代码时的样子。
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;
}
});
我想显示的是从数据库中收集的用户名,但显示的是 "is20x.User@4b6ca8f7" 之类的 ID。
非常感谢任何有关如何解决此问题的建议。
根据我的评论回答。
您正在向 data
数组添加一个 new User("username")
,这就是为什么您会得到一个奇怪的字符串,它是那个特定 User
.
的 ID
如果您 User
class 有 getUserName()
方法,请尝试 data.add(new User(rs.getString("username")).getUserName());
。
这可能会破坏您正在尝试做的所有事情,因为我假设您使用的 data
比这里更多。最好创建另一个变量并将组合框字符串存储在其中。所以像
//Init same place data is
comboString = FXCollections.observableArrayList(); //Declared somewhere else
data.add(new User(rs.getString("username")));
comboString.add(rs.getString("username"));
我想分享我为自动设置 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"));
}
注意这里最后一行的 "name" 字段,与 MySQL table 中的列名称拼写完全相同。
我有一个 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
是从
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;
}
});
我想显示的是从数据库中收集的用户名,但显示的是 "is20x.User@4b6ca8f7" 之类的 ID。 非常感谢任何有关如何解决此问题的建议。
根据我的评论回答。
您正在向 data
数组添加一个 new User("username")
,这就是为什么您会得到一个奇怪的字符串,它是那个特定 User
.
如果您 User
class 有 getUserName()
方法,请尝试 data.add(new User(rs.getString("username")).getUserName());
。
这可能会破坏您正在尝试做的所有事情,因为我假设您使用的 data
比这里更多。最好创建另一个变量并将组合框字符串存储在其中。所以像
//Init same place data is
comboString = FXCollections.observableArrayList(); //Declared somewhere else
data.add(new User(rs.getString("username")));
comboString.add(rs.getString("username"));
我想分享我为自动设置 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"));
}
注意这里最后一行的 "name" 字段,与 MySQL table 中的列名称拼写完全相同。