我目前正在使用JavaFX来显示SQL Server数据库中的数据。我已经根据数据库中一个表的内容创建了一个TableView。数据库表是Products的集合,因此TableView声明为:
@FXML
private TableView<Products> productTable;
TableView中的每一行都声明如下:
@FXML
private TableColumn<Products, String> productName;
每列都有一个ValueFactory,它包含一个PropertyValueFactory,它将数据从数据库映射到列。现在我真正想做的是让我的表包含来自2个数据库表的数据,因为产品和成本表之间存在一对一的关系。但是,我还没有找到一个聪明的方法来做到这一点。
任何人都有任何建议或想法吗?
答案 0 :(得分:2)
如果已经将Products模型的关系定义为这些表模型,则可以编写自定义单元格值工厂。在下面的代码中,“产品的成本和模型”列使用2个相关的表模型来呈现其单元格,即成本和模型。
TableColumn<Person, String> costAndModelCol = new TableColumn<Person, String>("Cost and Model of the product");
costAndModelCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
public ObservableValue<String> call(TableColumn.CellDataFeatures<Person, String> p) {
return SimpleStringProperty(p.getValue().getCost().getValue() + " (model: "+ p.getValue().getModel().getYear() +")");
}
});
答案 1 :(得分:1)
可能适用于您的问题的另一种解决方案是将两个表中的数据合并到JDBC连接的RowSet对象中,然后使用jdbcRowSet对象作为TableView的数据源。您可以轻松编写一个SQL查询,该查询可以将您需要的两个表中的数据合并到一个行集对象中。
您可以将行集对象映射到TableView,而不是将数据从数据库映射到TableView。当然,只有您能够自己对数据库执行SQL查询时,才能使用此解决方案。如果您仅限于通过数据访问对象或其他CRUD方法访问数据库,那么这将不适用于您的情况。