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