我正在尝试开发供个人使用的桌面应用程序,而不是像到目前为止那样使用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,因此请仔细阅读并从上面发布的链接开始。