2013-08-28 7 views
15

Ich fange an, javaFX zu lernen, und ich muss eine Tabelle mit Daten aus meiner Datenbank füllen. Ich habe eine Menge Code online gelesen, aber ich habe nicht gefunden, wonach ich gesucht habe. Ich lese this, aber ich weiß nicht, wie diese letzte Funktion implementiert wird. Ich las einen anderen Code, das zu tun und so weit dies einige meiner Code:Füllen Sie eine Tabellenansicht mit Hilfe der Datenbank in JavaFX

@FXML private TableView<User> table; 
@FXML private TableColumn<User, String> nameCol; 
@FXML private TableColumn<User, String> emailCol; 
private ObservableList<User> data; 

public void initialize(URL location, ResourceBundle resources) { 
    nameCol.setCellValueFactory(new PropertyValueFactory(“name”)); 
    emailCol.setCellValueFactory(new PropertyValueFactory(“email”)); 
    buildData(); 
} 
public void buildData() { 
     Connection connect = new Connection(); 
     Statement st = connect.Connect(); 
     data = FXCollections.observableArrayList(); 
     try { 
      ResultSet rs = st.executeQuery("SELECT * FROM USER"); 
      while (rs.next()) { 
       ObservableList<User> row = FXCollections.observableArrayList(); 
       for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { 
        row.add(rs.getString(i)); 
        System.out.println(row); 
       } 
       data.add(pol); 
      } 
      tabla.setItems(data);   
     } catch (SQLException ex) { 
      JOptionPane.showMessageDialog(null, ex); 
     } 
} 

Ich hoffe, dass mir

+0

Hier ist ein [Beispiel] (https://gist.github.com/jewelsea/4957967), die [Namen aus einer Datenbank in eine ListView holt] (http://stackoverflow.com/questions/14878788/javafx- Hintergrund-Thread-für-SQL-Abfrage). Das Konzept ist ähnlich zum Auffüllen eines TableView aus einer Datenbank. Das [TableView-Tutorial] (http://docs.oracle.com/javafx/2/ui_controls/table-view.htm) kann helfen, falls Sie es noch nicht erforscht haben). – jewelsea

+0

mögliches Duplikat von [Elemente aus einer Datenbank in einem JavaFX TableView anzeigen] (http://stackoverflow.com/questions/16228502/display-items-from-a-database-in-a-javafx-tableview) – jewelsea

Antwort

21

helfen kann, ich bin sicher, dies wird Ihnen helfen:

public class DBClass{  
    public Connection getConnection() throws ClassNotFoundException, SQLException{  
      Class.forName("com.mysql.jdbc.Driver"); 
      return DriverManager.getConnection("jdbc:mysql://192.168.0.1:3306/dbname","mysqluser","mysqluserpwd"); 
    } 
} 

In Controller-Klasse Sie wie folgt vor:

@FXML 
void initialize(){ 
    assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'UserMaster.fxml'."; 
    colUserName.setCellValueFactory(
     new PropertyValueFactory<Usermaster,String>("userName"));   
    colPassword.setCellValueFactory(    
     new PropertyValueFactory<Usermaster,String>("userPassword")); 
    colUserType.setCellValueFactory(
     new PropertyValueFactory<Usermaster,String>("userType"));   
    colPhoto.setCellValueFactory(
     new PropertyValueFactory<Object,ImageView>("userPhoto")); 
    objDbClass = new DBClass(); 
    try{ 
     con = objDbClass.getConnection(); 
     buildData(); 
    } 
    catch(ClassNotFoundException ce){ 
     logger.info(ce.toString()); 
    } 
    catch(SQLException ce){ 
     logger.info(ce.toString()); 
    } 
} 

private ObservableList<Usermaster> data; 

public void buildData(){   
    data = FXCollections.observableArrayList(); 
    try{  
     String SQL = "Select * from usermaster Order By UserName";    
     ResultSet rs = con.createStatement().executeQuery(SQL); 
     while(rs.next()){ 
      Usermaster cm = new Usermaster(); 
      cm.userId.set(rs.getInt("UserId"));      
      Image img = new Image("tailoring/UserPhoto/User"+cm.getUserId().toString()+".jpg");     

      ImageView mv = new ImageView(); 
      mv.setImage(img); 
      mv.setFitWidth(70); 
      mv.setFitHeight(80); 
      cm.userPhoto.set(mv); 
      cm.userName.set(rs.getString("UserName")); 
      cm.userPassword.set(rs.getString("UserPassword")); 
      cm.userType.set(rs.getString("UserType")); 
      data.add(cm);     
     } 
     tableview.setItems(data); 
    } 
    catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println("Error on Building Data");    
    } 
} 

und erstellen Sie eine POJO eine separate Java-Datei für jede Entität (Tabelle) mani wollen mit TableView

public class Usermaster{  

    public SimpleIntegerProperty userId = new SimpleIntegerProperty(); 
    public ObjectProperty userPhoto = new SimpleObjectProperty(); 
    public SimpleStringProperty userName = new SimpleStringProperty(); 
    public SimpleStringProperty userPassword = new SimpleStringProperty(); 
    public SimpleStringProperty userType = new SimpleStringProperty(); 
    public SimpleStringProperty encPass = new SimpleStringProperty(); 
    public SimpleStringProperty updt = new SimpleStringProperty(); 
    public SimpleStringProperty uptm = new SimpleStringProperty(); 

    public Integer getUserId() { 
     return userId.get(); 
    } 

    public Object getUserPhoto() { 
     return userPhoto.get(); 
    } 

    public String getUserName() { 
     return userName.get(); 
    } 

    public String getUserPassword() { 
     return userPassword.get(); 
    } 

    public String getUserType() { 
     return userType.get(); 
    } 

    public String getEncPass() { 
     return encPass.get(); 
    } 

    public String getUpdt() { 
     return updt.get(); 
    } 

    public String getUptm() { 
     return uptm.get(); 
    } 
} 

Ich habe dieses Programm getestet es funktioniert perfekt.

+2

Nur eine Anmerkung Hier ist es nicht empfehlenswert, die Modellklasse 'Usermaster' zu erstellen; "öffentliche" Immobilien zu haben ist generell eine sehr schlechte Idee. Sie sollten die Eigenschaften 'private' festlegen und Eigenschaften-Accessor-Methoden zusammen mit 'get'- und' set'-Methoden bereitstellen, wie in den [Beispielen im Tutorial] (http://docs.oracle.com/javase/8/javafx) /properties-binding-tutorial/binding.htm#JFXBD107) –

Verwandte Themen