当我从sql解析和输入数据时,java上的JavaFX表视图包



尽管没有错误,但Tableview并没有完全从sql表输出数据。也就是说,问题是程序只输出部分数据,尽管表格本身也有一些数据

SQL查询类(sqlworker(

public List<String> gettableManagmet() throws SQLException {
resSet = statmt.executeQuery("PRAGMA TABLE_INFO('Users');");
List<String> ls = new ArrayList<>();
while (resSet.next()) {
ls.add(resSet.getString("name"));
}
System.out.println(ls);
return ls;
}
public ObservableList<Users> getdatausermanagment() throws SQLException {
ObservableList<Users> res = FXCollections.observableArrayList();
resSet = statmt.executeQuery("SELECT * FROM Users");
while (resSet.next()) {
String id = String.valueOf(resSet.getInt("id"));
String Login = resSet.getString("Login");
String Pass = resSet.getString("Pass");
String Otel = resSet.getString("Otel");
String isManager = String.valueOf(resSet.getInt("isManager"));
String isAdmin  = String.valueOf(resSet.getInt("isAdmin"));
String isBlocked = String.valueOf(resSet.getInt("isBlocked"));
String CauseBlocking = resSet.getString("CauseBlocking");
System.out.println(id+ Login+Pass+Otel+isManager+isAdmin+isAdmin+CauseBlocking);
res.add(new Users(id,Login,Pass,Otel,isManager,isAdmin,isBlocked,CauseBlocking));
}
for(Users s : res){
System.out.println(s);
}
return res;
}

public void adddata(TableView table) throws SQLException {
ObservableList<Users> res = FXCollections.observableArrayList();
resSet = statmt.executeQuery("SELECT * FROM Users");
while (resSet.next()) {
String id = String.valueOf(resSet.getInt("id"));
String Login = resSet.getString("Login");
String Pass = resSet.getString("Pass");
String Otel = resSet.getString("Otel");
String isManager = String.valueOf(resSet.getInt("isManager"));
String isAdmin  = String.valueOf(resSet.getInt("isAdmin"));
String isBlocked = String.valueOf(resSet.getInt("isBlocked"));
String CauseBlocking = resSet.getString("CauseBlocking");
System.out.println(id+ Login+Pass+Otel+isManager+isAdmin+isAdmin+isBlocked+CauseBlocking);
table.getItems().add(new Users(id,Login,Pass,Otel,isManager,isAdmin,isBlocked,CauseBlocking));
}
}

用户类

private final String id;
private final String login;
private final String pass;
private final String otel;
private SimpleStringProperty isManager;
private final String isAdmin;
private final String isBlocked;
private final String causeBloocking;
public Users(String id, String login, String pass, String otel, String isManager, String isAdmin, String isBlocked, String causeBlocking) {
this.id = id;
this.login = login;
this.pass = pass;
this.otel = otel;
this.isManager = new SimpleStringProperty(isManager);
this.isAdmin = isAdmin;
this.isBlocked  = isBlocked;
this.causeBloocking = causeBlocking;
}
public String getId() {
return id;
}
public String getLogin() {
return login;
}
public String getPass() {
return pass;
}
public String getOtel() {
return otel;
}
public String getisManager() {
return isManager.get();
}
public String getisAdmin() {
return isAdmin;
}
public String getisBlocked() {
return isBlocked;
}
public String getCauseBloocking() {
return causeBloocking;
}

类,用于解析数据

public TableView table;
@Override
public void initialize(URL location, ResourceBundle resources) {
SQLWorker sqlWorker = new SQLWorker();
table.setEditable(true);
try {
for (String s: sqlWorker.gettableManagmet()) {
TableColumn<Users, String> tb = new TableColumn<>(s);
tb.setCellValueFactory(new PropertyValueFactory<>(s));
tb.setCellFactory(TextFieldTableCell.forTableColumn());
tb.setVisible(true);
table.getColumns().addAll(tb);
System.out.println(tb.getProperties());
}
System.out.println(table.getColumns().size());
sqlWorker.adddata(table);

} catch (SQLException e) {
e.printStackTrace();
}

}

fxml文件

在此处输入图像描述

当程序工作时在此处输入图像描述

sql数据库在此输入图像描述

这里的问题是

  1. 您没有遵守3个getter的Java命名约定;PropertyValueFactory依赖于这些:传递给构造函数的属性是通过将第一个字母转换为大写来修改的,然后PropertyValueFactory检查修改后的名称前缀为getis的方法。它例如寻找getIsManager()isIsManager()而不是getisManager()。(注意,顺便说一下,这更容易阅读。(
  2. 您的一个getter(和相应的字段(名称中有一个拼写错误:它应该是getCauseBlocking(),而不是getCauseBloocking()

最新更新