2016-12-30 51 views
0

有人可以告訴我,爲什麼一切工作正常,除了在表中顯示ID?數據類型有問題嗎?從DB的ID不顯示

有一個代碼,我把數據放到tableView中。

public class TabulkaProdukty { 

    private final FlowPane panelTabulky; 
    public final TableView<Produkty> tabulkaTabulkaProdukty; 
    public ObservableList<Produkty> dataTabulkaProdukty; 
    public static Connection connection; 
    private static Statement statement; 

    public TabulkaProdukty() { 
     panelTabulky = new FlowPane(); 
     tabulkaTabulkaProdukty = new TableView<>(); 
     panelTabulky.getChildren().add(tabulkaTabulkaProdukty); 
     tabulkaTabulkaProdukty.setEditable(true); 
     try { 
      connection = DriverManager.getConnection("jdbc:sqlite:produkty"); 
      statement = connection.createStatement(); 
      statement.executeUpdate("create table if not exists produkty(id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, nazev TEXT NOT NULL, popis TEXT NOT NULL, typ TEXT NOT NULL, cena TEXT NOT NULL);"); 
      dataTabulkaProdukty = FXCollections.observableArrayList(); 
      ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM produkty;"); 
      while (rs.next()) { 
       dataTabulkaProdukty.add(new Produkty(rs.getInt("id"), rs.getString("nazev"), rs.getString("popis"), rs.getString("typ"), rs.getString("cena"))); 
      } 

      // VECI V TABULCE 
      TableColumn idCol = new TableColumn("id"); 
      idCol.setMinWidth(50); 
      idCol.setCellValueFactory(
        new PropertyValueFactory<>("id")); 

      TableColumn nazevCol = new TableColumn("Název"); 
      nazevCol.setMinWidth(100); 
      nazevCol.setCellValueFactory(
        new PropertyValueFactory<>("nazev")); 

      TableColumn popisCol = new TableColumn("Popis"); 
      popisCol.setMinWidth(200); 
      popisCol.setCellValueFactory(
        new PropertyValueFactory<>("popis")); 

      TableColumn typCol = new TableColumn("Typ"); 
      typCol.setMinWidth(50); 
      typCol.setCellValueFactory(
        new PropertyValueFactory<>("typ")); 

      TableColumn cenaCol = new TableColumn("Cena"); 
      cenaCol.setMinWidth(50); 
      cenaCol.setCellValueFactory(
        new PropertyValueFactory<>("cena")); 

      tabulkaTabulkaProdukty.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
      tabulkaTabulkaProdukty.setItems(null); 
      tabulkaTabulkaProdukty.setItems(dataTabulkaProdukty); 
      tabulkaTabulkaProdukty.getColumns().addAll(idCol, nazevCol, popisCol, typCol, cenaCol); 

     } catch (Exception e) { 
      Alert alert = new Alert(Alert.AlertType.ERROR); 
      alert.setTitle("Error dialog"); 
      alert.setHeaderText("Chyba databáze"); 
      alert.setContentText("Nepovedlo se načíst data z databáze."); 
      alert.showAndWait(); 
     } 

    } 

還有一類導航產品

public class Produkty implements Serializable { 

     private final SimpleIntegerProperty id; 
     private final SimpleStringProperty nazev; 
     private final SimpleStringProperty popis; 
     private final SimpleStringProperty typ; 
     private final SimpleStringProperty cena; 
     public NaMinimum panelNaMinimum; 

     public Produkty(int pID, String pNazev, String pPopis, String pTyp, String pCena) { 
      this.id = new SimpleIntegerProperty(pID); 
      this.nazev = new SimpleStringProperty(pNazev); 
      this.popis = new SimpleStringProperty(pPopis); 
      this.typ = new SimpleStringProperty(pTyp); 
      this.cena = new SimpleStringProperty(pCena); 
     } 

     public int getIDProduktu() {return id.get();} 
     public void setIDProduktu(int pID) {id.set(pID);} 
     public String getNazev() {return nazev.get();} 
     public void setNazev(String pNazev) {nazev.set(pNazev);} 
     public String getPopis() {return popis.get();} 
     public void setPopis(String pPopis) {popis.set(pPopis);} 
     public String getTyp() {return typ.get();} 
     public void setTyp(String pTyp) {typ.set(pTyp);} 
     public String getCena() {return cena.get();} 
     public void setCena(String pCena) {cena.set(pCena);} 

    } 

我真的很感激解決的任何建議。

+0

我說成問題 –

回答

2

PropertyValueFactory尋找基於構造函數參數的方法,而不是字段。基於吸氣劑的名稱,參數應該是"IDProduktu""iDProduktu"

idCol.setCellValueFactory(new PropertyValueFactory<>("IDProduktu")); 

注意,沒有財產的getter方法TableView無法觀察到的性質的任何改變。在這種情況下,您可以使用普通字段來獲得相同的效果。爲了觀察變化,您需要提供一種名爲<property>Property的方法,其中<property>是傳遞給構造函數PropertyValueFactory的屬性名稱的佔位符,例如,如果你使用"id"作爲構造參數:

public IntegerProperty idProperty() { 
    return id; 
} 
+0

非常感謝您的回答,但我仍然不知道如何將其實施到我的代碼中。你可以試着實施它嗎? –

+0

@HonzíkAzjolHavelka實施什麼?第一個代碼片段可以用來替換你的'TabulkaProdukty'構造函數中的類似語句('idCol.setCellValueFactory(new PropertyValueFactory <>(「id」));'),第二個代碼片段可以粘貼到'Produkty'類(在這種情況下保留'idCol.setCellValueFactory(new PropertyValueFactory <>(「id」));')... – fabian

+0

謝謝!!!!我改變了它,它的工作原理!非常感謝你的耐心! –

0

這將是更好地知道你在做什麼,但我的猜測是,整數值沒有被顯示爲一個字符串,因此不像其他參數一樣。

+0

嗯,我試圖從數據庫中獲得值到表並顯示它。我有和你一樣的猜測,但是我在Java編程中很糟糕。這是從實際例子中複製出來的,我不知道,我該怎麼做才能說實話。這是愚蠢的功課。 –