如何用SQL数据填充TableView

如何用SQL数据填充TableView,sql,javafx,scenebuilder,Sql,Javafx,Scenebuilder,我一直在尝试加载包含从数据库查询的数据的TableView,但似乎无法使其正常工作 这是我第一次尝试用数据库查询项来填充数据库,以防我的代码看起来口吃而且不好 FXML是通过JavaFXSceneBuilder完成的 这是数据库查询类: public static void refreshTableApplicant(){ dataApplicant = FXCollections.observableArrayList(); try { Conn

我一直在尝试加载包含从数据库查询的数据的TableView,但似乎无法使其正常工作

这是我第一次尝试用数据库查询项来填充数据库,以防我的代码看起来口吃而且不好

FXML是通过JavaFXSceneBuilder完成的

这是数据库查询类:

public static void refreshTableApplicant(){
      dataApplicant = FXCollections.observableArrayList();
      try {
            Connection con = Login.getConnection();
            Statement stmt = con.createStatement();
            if (Login.getEntitlement() < 3) {
                ResultSet rs = stmt.executeQuery("Select * from applicant");
                while (rs.next()) {
                    ObservableList<String> applicant = FXCollections.observableArrayList();
                    applicant.add(rs.getString(1));
                    applicant.add(rs.getString(5));
                    applicant.add(rs.getString(6));
                    applicant.add(rs.getString(8));
                    applicant.add(rs.getString(9));
                    applicant.add(rs.getString(10));
                    applicant.add(rs.getString(11));
                    applicant.add(rs.getString(13));
                    applicant.add(rs.getString(14));
                    applicant.add(rs.getString(16));
                    applicant.add(rs.getString(19));
                    applicant.add(rs.getString(7));
                    applicant.add(rs.getString(20));
                    dataApplicant.add(applicant);
                    System.out.println(dataApplicant);

                }
            }
            else {
                ResultSet rs = stmt.executeQuery(
                        "Select * from applicant a inner join relationship r on r.applicantID = a.applicantID inner join vacancy v on v.vacancyID = r.vacancyID where v.divisionID = "
                                + Login.getDivisionID());
                while (rs.next()) {
                    ObservableList<String> applicant = FXCollections.observableArrayList();
                    applicant.add(rs.getString(1));
                    applicant.add(rs.getString(5));
                    applicant.add(rs.getString(6));
                    applicant.add(rs.getString(8));
                    applicant.add(rs.getString(9));
                    applicant.add(rs.getString(10));
                    applicant.add(rs.getString(11));
                    applicant.add(rs.getString(13));
                    applicant.add(rs.getString(14));
                    applicant.add(rs.getString(16));
                    applicant.add(rs.getString(19));
                    applicant.add(rs.getString(7));
                    applicant.add(rs.getString(20));                           
                    dataApplicant.add(applicant);
                }
            }
             tableViewApplicant.getItems().addAll(dataApplicant);
        } catch (SQLException e) {
            System.out.println("MainWindowController - refreshTableApplicant");
            e.printStackTrace();
        }         
}   
这是FXML文件的一部分:

<Tab fx:id="tabApplicant" text="applicant">
              <content>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="1080.0" prefWidth="1920.0">
                       <children>
                          <HBox layoutX="234.0" layoutY="116.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                             <children>
                                <TableView fx:id="tableViewApplicant" layoutX="234.0" layoutY="116.0" prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
                                  <columns>
                                    <TableColumn prefWidth="-1.0" text="applicant-ID" />
                                    <TableColumn prefWidth="-1.0" text="name" />
                                    <TableColumn prefWidth="-1.0" text="firstName" />
                                    <TableColumn prefWidth="-1.0" text="street" />
                                    <TableColumn prefWidth="-1.0" text="houseNr" />
                                    <TableColumn prefWidth="-1.0" text="postalCode" />
                                    <TableColumn prefWidth="-1.0" text="city" />
                                    <TableColumn prefWidth="-1.0" text="telefon home" />
                                    <TableColumn prefWidth="-1.0" text="telefon mobil" />
                                    <TableColumn prefWidth="-1.0" text="e-mail" />
                                    <TableColumn prefWidth="-1.0" text="vacancy" />
                                    <TableColumn prefWidth="-1.0" text="birthday" />
                                    <TableColumn prefWidth="-1.0" text="educationalAchievement" />
                                  </columns>
                                   <columnResizePolicy>
                                      <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                                   </columnResizePolicy>
                                </TableView>
                             </children>
                          </HBox>
                       </children></AnchorPane>
              </content>
            </Tab>

那么哪一行是第114行?TableViewApplicator.getItems().addAll(DataApplicator);因此
tableviewapplicator
为空。这意味着它不是从FXML文件中注入的。您应该(至少)在控制器中发布定义它的FXML和its声明。为什么
RefreshTableApplications
方法是静态的?如何访问从FXML注入的
tableviewapplicator
字段?请显示
tableviewapplicator
字段的声明。这个方法是处理程序方法吗?如果没有,您将如何调用它?
<Tab fx:id="tabApplicant" text="applicant">
              <content>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="1080.0" prefWidth="1920.0">
                       <children>
                          <HBox layoutX="234.0" layoutY="116.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                             <children>
                                <TableView fx:id="tableViewApplicant" layoutX="234.0" layoutY="116.0" prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
                                  <columns>
                                    <TableColumn prefWidth="-1.0" text="applicant-ID" />
                                    <TableColumn prefWidth="-1.0" text="name" />
                                    <TableColumn prefWidth="-1.0" text="firstName" />
                                    <TableColumn prefWidth="-1.0" text="street" />
                                    <TableColumn prefWidth="-1.0" text="houseNr" />
                                    <TableColumn prefWidth="-1.0" text="postalCode" />
                                    <TableColumn prefWidth="-1.0" text="city" />
                                    <TableColumn prefWidth="-1.0" text="telefon home" />
                                    <TableColumn prefWidth="-1.0" text="telefon mobil" />
                                    <TableColumn prefWidth="-1.0" text="e-mail" />
                                    <TableColumn prefWidth="-1.0" text="vacancy" />
                                    <TableColumn prefWidth="-1.0" text="birthday" />
                                    <TableColumn prefWidth="-1.0" text="educationalAchievement" />
                                  </columns>
                                   <columnResizePolicy>
                                      <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
                                   </columnResizePolicy>
                                </TableView>
                             </children>
                          </HBox>
                       </children></AnchorPane>
              </content>
            </Tab>
    public static int login(String username, String password) {
    try {
        con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=trilab;user=trilab;password=trilab");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT entitlement, employeeID, divisionID from employee where loginName = '"+ username + "' AND password = '" + password + "'");
        while (rs.next()) {
            entitlement = rs.getInt(1);
            ID = rs.getInt(2);
            divisionID = rs.getInt(3);
            MainWindowController.refreshTableApplicant();
            return entitlement;
        }
    } catch (Exception e) {
        System.out.println("Login - login");
        e.printStackTrace();
    }
    return 0;
}