【问题标题】:Linking an editable tableView to a database in javaFX将可编辑的 tableView 链接到 javaFX 中的数据库
【发布时间】:2015-12-10 02:43:55
【问题描述】:

我正在从事 JavaFX 和数据库实践项目(主要是我是初学者),我有一个独特的课程,其中保存有关音乐会的记录(名称、地点、日期等)。我最初将它们保存在一个可观察的数组列表中,该数组列表填充了一个表格视图。从这里可以编辑、删除或添加新记录。

我现在使用 ORMLite 和 sqlite 将这些存储在数据库中。这样我就可以对数据进行过滤(即显示特定位置的所有事件),然后将其显示在表格上。

我的问题是,当我从数据库中读取数据时,我将其转换为 ObservableArrayList,以便表格视图可以使用它,但是通过创建新数组列表,我的编辑/新建/删除按钮只会影响这个列表,而不是数据库。问题是每次我执行查询(例如向数据库添加或删除记录)时,它都需要为 tableView 重新生成 observableArrayList,这需要大约 5 秒的时间来处理大约 250k 条记录。

有没有更有效的方法来处理数据库和 javaFx tableViews?

【问题讨论】:

  • 如果您希望数据库中的更新发生,而用户正在对表进行操作,则可能需要一些时间才能完成,因为数据库操作是耗时的操作。如果你想摆脱滞后,你可以使用线程。一个很好的阅读将是问题的答案Using threads to make database requests
  • 为什么每次更新都需要“复制”数据?为什么不直接在数据库中执行更新,如果成功,更新可观察列表中的本地数据?

标签: java database javafx tableview ormlite


【解决方案1】:

有没有更有效的方法来处理数据库和 javaFx tableViews?

  1. 当您更新某些字段然后浏览记录列表并仅对那些脏的那些进行 DAO 调用时,如何在记录上设置某种脏标志?可能是一个带有 CREATE、DELETE、UPDATE、NONE 的枚举。

  2. 另一个想法是在更新记录时拨打dao.update(...)dao.delete(...)dao.create(...) 电话,尽管您可能希望每次都碰碰运气。

  3. 最后一个想法是保留 4 个数组。一个是整个列表,一个是新记录,一个是脏记录,一个是要删除的记录。您可以在按下编辑/新建/删除按钮时将记录添加到列表中,最后您可以一次将它们全部保存。

【讨论】:

    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2014-10-14
    • 2023-03-11
    • 2017-07-23
    • 2016-04-07
    • 2013-09-14
    相关资源
    最近更新 更多