【问题标题】:Efficient way to implement paged SQL result table in a Java desktop application在 Java 桌面应用程序中实现分页 SQL 结果表的有效方法
【发布时间】:2010-10-30 09:55:36
【问题描述】:

我需要从 SQL 选择结果集中构建一个表。我想向表中添加一些分页功能,因为结果集可能非常大。有很多讨论如何在 SQL 级别进行分页。但是如何在 GUI 级别实现分页呢?我有两个想法:

  1. 以 Web UI 样式进行分页 - 例如 google 搜索结果分页;
  2. “Excel 样式”- 表格所在的滚动窗格会随着用户向下滚动而展开。

第二个看起来更好,但实现起来很复杂。何时为下一个数据块执行 SQL 选择,以便用户无需等待。应该有一些“预读”的逻辑吗?如果用户滚动很快会发生什么?如何处理不再可见的行以保持恒定的内存使用? 也许已经有这样的表格组件或很好的例子?或者这个好看的表格功能不值得努力实现它?

【问题讨论】:

    标签: java paging


    【解决方案1】:

    您可以直接在 TableModel 中执行所有操作,无需更改 UI 中的某些内容(您可能会在 UI 中显示某些内容 - 一种状态 - 但您不需要更改 JTable 呈现自身的方式)。

    只需实现一个 JDBCTableModel,它将具有:

    • 计算结果并将此值作为 getRowCount() 返回。
    • 有一个后台线程将页面 X(行 X 到行 X + page_size)带入内存
    • 如果视图 (JTable) 请求不存在的行(页面未加载),则在左上角或右上角的某处显示消息“正在加载数据...”并返回空单元格。

    分页对 Swing 应用程序没有意义,它是在当前花哨的 AJAX 库可以实现表格滚动之前发明的(参见 http://www.ext-livegrid.com/)。

    【讨论】:

    【解决方案2】:

    为 AJAX 库构建分页表的人显然已经考虑了很多,所以如果你找不到已经构建的东西,你也许可以向他们学习。由于您使用的是 Java,请注意您可以找到用 Java 编写的用于 GWT 的分页表。请参阅这些 SO 线程:

    GWT paging widget

    Best pageable table implementation in GWT

    您实现的想法(以及大部分代码)可以在提到的开源项目中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2010-11-21
      • 2012-07-29
      相关资源
      最近更新 更多