2013-08-28 1 views
15

Я начинаю изучать javaFX, и мне нужно заполнить таблицу данными из моей базы данных. Я читал много кода в Интернете, но я не нашел то, что искал. Я читал this, но я не знаю, как реализовать эту последнюю функцию. Я читал некоторые другие код, чтобы сделать это и до сих пор это часть моего кода:Заполнение таблицы с использованием базы данных в 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); 
     } 
} 

Я надеюсь, что вы можете помочь мне

+0

Здесь [образец] (https://gist.github.com/jewelsea/4957967), который [выбирает имена из базы данных в ListView] (http://stackoverflow.com/questions/14878788/javafx- фон-нить-для-SQL-запрос). Концепция аналогична для заполнения TableView из базы данных. Учебник [TableView tutorial] (http://docs.oracle.com/javafx/2/ui_controls/table-view.htm) может помочь, если вы еще не исследовали его). – jewelsea

+0

Возможный дубликат [Отображать элементы из базы данных в JavaFX TableView] (http://stackoverflow.com/questions/16228502/display-items-from-a-database-in-a-javafx-tableview) – jewelsea

ответ

21

Я уверен, что это поможет вам:

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"); 
    } 
} 

в класс контроллера необходимо выполнить следующие действия:

@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");    
    } 
} 

и создать Pojo отдельный файл Java для каждого объекта (таблицы), чтобы хотеть мани pulate using 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(); 
    } 
} 

Я протестировал эту программу, она отлично работает.

+2

Просто примечание здесь это не рекомендуемый способ создания класса модели 'Usermaster'; наличие «публичных» свойств, как правило, очень плохая идея. Вы должны сделать свойства 'private' и предоставить методы доступа к ресурсам вместе с методами' get' и 'set', как в [примерах в учебнике] (http://docs.oracle.com/javase/8/javafx /properties-binding-tutorial/binding.htm#JFXBD107) –

Смежные вопросы