Java FX TableView 数据库

Java FX TableView Database

我正在构建 Java 外汇应用程序 3 周了,我遇到了一个问题,我在互联网上搜索了相关内容,但找不到解决方案。我必须在 table 视图中的行上填充数据 我正在从数据库中获取数据,但我不能将其放入 table 我有这个代码,我使用它来从数据库中获取数据.

  public ObservableList<ObservableList> GetCustomerData(){
  ObservableList<ObservableList> Data = FXCollections.observableArrayList();
    try{
        ConnectToDB();
        DBStatement = DBConnection.createStatement();
        DataRetrive = DBStatement.executeQuery("SELECT * FROM Customer");
        while (DataRetrive.next()){
         ObservableList<String> Row = FXCollections.observableArrayList();
           Row.add(String.valueOf(DataRetrive.getInt(1)));
           Row.add(DataRetrive.getString(2));
           Row.add(DataRetrive.getString(3));
           Row.add(DataRetrive.getString(4));
           Row.add(DataRetrive.getString(5));
           Row.add(DataRetrive.getString(6));
           Row.add(DataRetrive.getString(7));
           Row.add(DataRetrive.getString(8));
           Row.add(DataRetrive.getString(9));          
          Data.add(Row);
        }
        CloseDB();
    }catch(SQLException e){
        e.printStackTrace();
    }
    return Data;
}

如何从这个 ObservableList 的 table 个单元格中添加数据?

最好有一个单独的 class 到 CRUD 操作:

public abstract class CustomerDML {

    public static final String TABLE_NAME = "Customer";
    QueryClass qc = new QueryClass();
    public ObservableList<Map> getCustomerData() {
    ObservableList<Map> productList = FXCollections.observableArrayList();
    try {
        qc.setPs(qc.getConn().prepareStatement("SELECT * FROM " + TABLE_NAME));
        qc.setRs(qc.getPs().executeQuery());
        while (qc.getRs().next()) {
            Map<String, String> product = new HashMap<>();
            product.put("cus_id", String.valueOf(qc.getRs().getInt("cus_id")));
            product.put("name", qc.getRs().getString("name"));
            product.put("age", String.valueOf(qc.getRs().getInt("age")));
            product.put("telephone", qc.getRs().getString("telephone"));
            productList.add(product);

        }
        return customerList;
    } catch (SQLException ex) {
        return null;
    }
}

您可以像下面这样实现您的 QueryClass :

public class QueryClass {

private Connection conn;
private PreparedStatement ps;
private ResultSet rs;
//private String query;

public QueryClass() {
    conn = DBConnectionClass.myConnection();
}
//getters and setters
...

假设我们已经从您的 fxml 向您的控制器注入了如下内容:

public class Customer_fxmlController extends CustomerDML implements Initializable {

@FXML
private TableView<Map> cusTable;
@FXML
private TableColumn idCol;
@FXML
private TableColumn nameCol;
@FXML
private TableColumn ageCol;
@FXML
private TableColumn telCol;
...

public void loadCustomers() {

    idCol.setCellValueFactory(new MapValueFactory("cus_id"));
    nameCol.setCellValueFactory(new MapValueFactory("name"));
    ageCol.setCellValueFactory(new MapValueFactory("age"));
    telCol.setCellValueFactory(new MapValueFactory("telephone"));

    cusTable.setItems(getCustomerData());//Which returns a ObservableList<Map>   
   }