使用SQlite数据库填充ListView

时间:2019-01-24 21:35:07

标签: java javafx sqlite

我正在尝试开发供个人使用的桌面应用程序,而不是像到目前为止那样使用MySQL,我一直在使用SQLite,希望不必每次都想单独运行数据库程序。运行该应用程序。

我已经到了填充SQLite数据库的地步,经过许多小时的搜索,尝试,搜索,尝试...之后,我才能够操纵内容,但是我无法弄清楚如何在JavaFX ListView中显示SQLite内容。

我可以通过以下代码向控制台显示数据库内容:

public void selectAll(String tableLabel) {
    String sql = "SELECT * FROM " + tableLabel;

    try (Connection conn = this.connect();
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql)) {

        // loop through the result set
        while (rs.next()) {
            System.out.println(rs.getInt("id") + "\t" +
                    rs.getString("fldAchievementTitle") + "\t" +
                    rs.getInt("fldProgress") + "\t" +
                    rs.getInt("fldBronzeGoal") + "\t" +
                    rs.getInt("fldSilverGoal") + "\t" +
                    rs.getInt("fldGoldGoal") + "\t" +
                    rs.getString("fldStatus"));


        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

这是我进行的最新修复,实际上确实将数据显示到ListView,但格式为:home.Achievement@f303f0b

@FXML
public void initialize() throws Exception {
        String s1;
        int s2;
        int s3;
        int s4;
        int s5;
        String s6;
    ArrayList<Achievement> al = new ArrayList<Achievement>();
    String sql = "SELECT * FROM " + "tblAchievements";

    try (Connection conn = this.connect();
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql)) {

        // loop through the result set
        while (rs.next()) {
            //Displays the DB content to the console.
            System.out.println(rs.getInt("id") + "\t" +
                    rs.getString("fldAchievementTitle") + "\t" +
                    rs.getInt("fldProgress") + "\t" +
                    rs.getInt("fldBronzeGoal") + "\t" +
                    rs.getInt("fldSilverGoal") + "\t" +
                    rs.getInt("fldGoldGoal") + "\t" +
                    rs.getString("fldStatus"));


            // My draft attempt at displaying the content in ListView
            s1 = rs.getString("fldAchievementTitle");
            s2 = rs.getInt("fldProgress");
            s3 = rs.getInt("fldBronzeGoal");
            s4 = rs.getInt("fldSilverGoal");
            s5 = rs.getInt("fldGoldGoal");
            s6 = rs.getString("fldStatus");

            Achievement r1 = new Achievement(s1,s2,s3,s4,s5,s6);

            al.add(r1);

        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

    Iterator itr = al.iterator();

    while(itr.hasNext()){
        Achievement st = (Achievement)itr.next();
        //I'm testing if it'll print it to console. Result = yes
        System.out.println(st.fldAchievementTitle+" "+st.fldProgress+" "+st.fldBronzeGoal+" "+st.fldSilverGoal+" "+st.fldGoldGoal+" "+st.fldStatus);
        //Try to add the arraylist to an observableArrayList
        ObservableList<Achievement> items = FXCollections.observableArrayList(al);
        achievementsOverview.setItems(items);
    }


}

到目前为止,我已经尝试了很多选择,这使我越来越困惑……您能引导我朝正确的方向发展吗?

我已经阅读了很多有关游标的内容,但这是针对Android开发的。在桌面应用程序上仍然可以使用吗?

谢谢。

更新和解决方案

因此,此问题被标记为重复。

让我快速解决这个问题,因为这损害了我在此处发布问题的能力。

我发贴说我收到了以下格式的输出:home.Achievement@f303f0b

据我所知,这必须是一个错误并且可以快速解决。

当然,作为原始答案链接到的论坛线程最终确实为我提供了解决方案,但我不知道在哪里以及需要使用哪些自定义对象,因此没有机会到那时,我本可以看到这是一个解决方案,并且在相同情况下可能还有其他用户。当然,我了解了什么是自定义对象以及为什么该解决方案有意义,但是线程中可能对此有一个简单的注释。

但是,读者(读者)是否需要相同的内容(用数据填充列表视图),请查看以下链接:How can I Populate a ListView in JavaFX using Custom Objects?

是的,至少在我的情况下,您需要使用Objects和ObservableLists,因此请仔细阅读并从上面发布的链接开始。

0 个答案:

没有答案