Java 从数据库中删除TableView中的行
嘿,伙计们 这样我就可以将某人从我的TableView中删除。我使用此方法生成tableview:Java 从数据库中删除TableView中的行,java,mysql,sql,javafx,Java,Mysql,Sql,Javafx,嘿,伙计们 这样我就可以将某人从我的TableView中删除。我使用此方法生成tableview: public void initialize(){ TableView tableview = getUserDeleteTable(); ObservableList<ObservableList> data; Connection c; data = FXCollections.observableArrayList(); try {
public void initialize(){
TableView tableview = getUserDeleteTable();
ObservableList<ObservableList> data;
Connection c;
data = FXCollections.observableArrayList();
try {
c = Database.getConnection();
String SQL = "SELECT * FROM User";
ResultSet rs = c.createStatement().executeQuery(SQL);
for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
//We are using non property style for making dynamic table
final int j = i;
TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i + 1));
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString());
}
});
tableview.getColumns().addAll(col);
// System.out.println("Column ["+i+"] ");
}
while (rs.next()) {
//Iterate Row
ObservableList<String> row = FXCollections.observableArrayList();
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
//Iterate Column
row.add(rs.getString(i));
}
// System.out.println("Row [1] added "+row );
data.add(row);
}
//FINALLY ADDED TO TableView
tableview.setItems(data);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error on Building Data");
}
所以现在我很好奇,从数据库中删除一个的最佳解决方案是什么。tableview中填充了一个用户对象,该对象具有ID名称、密码和电子邮件地址。最好的方法是什么
正如james_D所说,我应该把用户对象放在列表中。我得到了一个用户类,其中包含了它需要的所有内容,但我如何正确地折射它?“tableview中填充了一个用户对象…”。不是根据您发布的代码:在代码中,您用
ObservableList
s填充tableview。如果编写一个User
类,并用实际的User
对象填充表,那么管理起来会更好、更容易。然后,您可以很容易地从用户
对象获取ID,并执行SQL删除其中一个。我将从重构开始。(还要去掉所有原始类型:即使用TableView
而不是TableView
,等等)。因此,如果我将列表输入更改为它,则会在TableView.setItems(数据)处出错,因为ejavafx.collections.ObservableList不能转换为javafx.collections.ObservableList。有没有办法解决这个问题?是的。使用User
实例而不是列表填充表。换句话说,使数据
成为可观察列表
和行
成为用户
,等等,所以我更改了可观察列表数据;是否需要将CellValueFactorys更改为User,String?因为就像我在上面所做的更改一样,它在给出data.add(row)时遇到了问题。我真的不知道如何折射它你介意帮我吗?有很多教程展示了如何使用TableView
显示域对象(例如,在你的示例中是User
s)。是一个,;这是另一个。这样设置之后,您就可以执行User selectedItem=tableview.getSelectionModel().getSelectedItem()
然后intid=selectedItem.getId()
(假设您的User
类有一个getId()
方法)。然后在数据库中执行delete语句。
and this on to delete a User from the Tableview:
delButton.setOnAction( event -> {
Object selectedItem = tableview.getSelectionModel().getSelectedItem();
tableview.getItems().remove(selectedItem);
});