使用JavaFX中的数据库填充tableview

使用JavaFX中的数据库填充tableview,java,database,javafx,tableview,populate,Java,Database,Javafx,Tableview,Populate,我开始学习javaFX,我需要用数据库中的数据填充一个表。我在网上读了很多代码,但还没有找到我想要的。我读过,但我不知道如何实现最后一个函数。我阅读了一些其他代码来实现这一点,到目前为止,这是我的一些代码: @FXML private TableView<User> table; @FXML private TableColumn<User, String> nameCol; @FXML private TableColumn<User, String> em

我开始学习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);
        }
}
@FXML私有TableView表;
@FXML私有表列名称col;
@FXML私有表列;
私有可观测列表数据;
公共void初始化(URL位置、ResourceBundle资源){
nameCol.setCellValueFactory(新属性ValueFactory(“名称”);
emailCol.setCellValueFactory(新属性ValueFactory(“电子邮件”);
buildData();
}
public void buildData(){
连接=新连接();
语句st=connect.connect();
data=FXCollections.observearraylist();
试一试{
结果集rs=st.executeQuery(“从用户选择*);
while(rs.next()){
ObservableList行=FXCollections.observableArrayList();

对于(int i=1;i我相信这将帮助您:

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

我已经测试过这个程序,它运行得非常好。

这里有一个例子。这个概念类似于从数据库填充TableView。如果您还没有研究过,可能会有所帮助)。可能重复此处的一个注意事项,即这不是创建模型类
Usermaster
的推荐方法;拥有
public
属性通常是一个非常糟糕的主意。您应该将属性设置为private
,并提供属性访问器方法,以及
get
set
方法,如我所述在
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();
   }
}