2017-10-28 71 views
0

這裏是我的問題: 我有一個類Detenu:的ResultSet在ObservableList

public class Detenu { 
    private static String n_ecrou; // Unique id 
    private static String prenom; 
    private static String nom; 
    private static String date_naissance; 
    private static String lieu_naissance; 

    public Detenu(String p1, String p2, String p3, String p4, String p5) { 
     n_ecrou = p1; 
     prenom = p2; 
     nom = p3; 
     date_naissance = p4; 
     lieu_naissance = p5; 
    } 

    public static String getN_ecrou() { 
     return n_ecrou; 
    } 
} 

我也使用JDBC來我的應用程序連接到嵌入式數據庫。該數據庫實現了具有5列「DETECU」,「PRENOM」,「NOM」,「DATE_NAISSANCE」,「LIEU_NAISSANCE」的DETENU表。

然後,我需要在JavaFX TableView中顯示存儲在我的數據庫中的所有Detenus。所以我使用這樣的getData()函數:

public static ObservableList<Detenu> getData() { 
    ObservableList<Detenu> data = FXCollections.observableArrayList(); 
    try { 
     // This part works fine 
     Connection con = DriverManager.getConnection("..."); 
     Statement stmt = con.createStatement(); 
     ResultSet result = stmt.executeQuery("SELECT * FROM DETENU); 

     while(result.next()) { 
      // Here comes the problem 
      // This shows all the different n_ecrou 
      System.out.println(result.getObject(1).toString()); 

      data.add(new Detenu(result.getObject(1).toString(), result.getObject(2).toString(), result.getObject(3).toString(), result.getObject(4).toString(), result.getObject(5).toString())); 
     } 
     // This shows the same n_ecrou 
     System.out.println(data.get(0).getN_ecrou() + " " + data.get(1).getN_ecrou()); 
     stmt.close(); 
     result.close(); 
    } catch(SQLException e) { 
     //Error process 
    } 

    return data; 
} 

例如,我有兩個Detenus在我的數據庫中。我返回的ObservableList包含兩個Detenus,但同一個,是數據庫中的最後一個。 所以當我想要在TableView中顯示這些數據時,它會創建兩行,但它們是相同的。 顯示在圖片中:

The database | The TableView

我沒有任何想法,爲什麼發生這種情況,所以任何幫助將感謝:)

PS:對不起,我的英語

回答

0

你的所有Detenu類的成員static(由所有實例共享)這就是你有這種行爲的原因。只需刪除字段上的關鍵字,它應該可以工作。

+0

好吧,這工作得很好......非常感謝! – NicoTine