2015-11-14 32 views
0

我在Java FX應用程序的基礎上構建了3周,現在我遇到了一個問題,通過互聯網搜索有關這方面的信息,但找不到解決方案。我必須在tableview中的行填充數據我從數據庫中獲取數據,但我不能把它放在表中我有這個代碼,我爲了從數據庫中獲取數據。Java FX TableView數據庫

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中的表格單元格中添加數據?

+0

您使用'tableView.setItems(getCustomerData());'將該數據添加到表中。 –

回答

1

這是很好的做法,有一個單獨的類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> 
    } 
+1

這真棒我通過哈希映射獲取單元格值,它的工作。非常感謝你的時間和你的迴應:) –