我的javaFx应用程序有许多带有可编辑表格单元格的表格,用于填充sql数据库中的数据。我还希望在通过表格单元格进行数据编辑后对数据库进行更改。根据这个结果" https://docs.oracle.com/javafx/2/ui_controls/table-view.htm&# 34; 我使用以下代码创建了可编辑的表格单元格。
item_price_col.setCellValueFactory(
new PropertyValueFactory("price")
);
item_price_col.setCellFactory(TextFieldTableCell.forTableColumn());
item_price_col.setOnEditCommit(
new EventHandler<CellEditEvent<Item, String>>() {
@Override
public void handle(CellEditEvent<Item,String> t) {
String old_price=t.getOldValue();
((Item) t.getTableView().getItems().get(
t.getTablePosition().getRow())
).setPrice(t.getNewValue());
String new_price=t.getNewValue();
System.out.println("Old Price:"+old_price);
System.out.println("New Price:"+new_price);
}
}
);
但是编辑后它没有在数据库中进行任何更改。因此,我认为必须在该句柄方法中编写更新查询。但我只能知道旧值和新值。我不能像那样进行查询声明&#34;更新项目设置价格= new_price,其中price = old_price&#34;。如果我将项目的单个价格更新为新值,我的项目表中的每个项目都有与我编辑的项目相同的价格将改变新的价格值。有什么办法可以解决这个问题吗? 这是我的项目表结构。
item | CREATE TABLE `item` (
`code` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`price` varchar(50) NOT NULL,
`whole_sale_price` varchar(50) NOT NULL,
`orginal_price` varchar(50) DEFAULT NULL,
PRIMARY KEY (`code`),
UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
答案 0 :(得分:2)
在数据库中为您的项目保留id
字段。
如果数据库中没有主键或唯一键,则可能会出现一些架构错误。无论如何,在某些数据库服务器中指定了行ID。
private int id; // id field for item object.
更新时将id包含为条件。
update sometable set price = item.getPrice() where id = item.getId();
我知道sql编写得不好但我希望你能得到它
并且您不必在表格中显示id字段的值。
这种技术在大多数系统中使用
编辑2015.12.18
表格中有代码列。通过jdbc检索到您的项目对象的id字段。
有一个例子