首页 > 解决方案 > 当我从 sql 解析和输入数据时,Java 上的 JavaFX tableview 包

问题描述

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



}

.xml 文件

在此处输入图像描述

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

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

标签: javasqljavafx-8

解决方案


这里的问题是

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

推荐阅读