【问题标题】:Pagination of data issue: java + oracle sql数据分页问题:java + oracle sql
【发布时间】:2017-02-15 14:35:47
【问题描述】:

我需要对从数据库中检索到的数据(项目)进行分页。 UI 还包含搜索选项和数据量,顺序也取决于搜索条件。

假设一个客户端使用一些搜索条件发送请求并获得 60 个结果。客户端会看到从 1 到 maxPageSize(默认为 25)的项目。如果请求第二页 - 将显示 26-50 项。 问题是目前我无法获得最大结果的数量并且无法显示 maxPage 的数量。

我看到了这个问题的 2 个解决方案:

  1. 第二次查询数据库,参数相同但没有 分页并获取项目的数量。
  2. 从数据库中检索所有项目, 通过搜索条件在后端代码中过滤它们并发送给客户端。

问题是:

1) 一般而言,哪种操作成本更低?

2) 如果有更好的解决方案,还能做些什么来解决这类任务?

附:用 Java 编写的后端代码,查询通过 JDBC 发送到 Oracle 11g DB。

---编辑---

我已经通过这种方式解决了这个问题:

WITH FINAL_RESULT AS 
    (SELECT SORTED_ITEMS.*, 
            ROWNUM RN 
     FROM (sorted basic query with searches))

   SELECT FINAL_RESULT.*, 
         (SELECT COUNT(*) FROM FINAL_RESULT) ITEMS_COUNT
    FROM FINAL_RESULT
    WHERE RN BETWEEN ? AND ?

【问题讨论】:

  • 为什么不能得到结果总数?但更重要的是,为什么你甚至需要它?只需查询 26 个结果,如果返回 26,则显示下一个按钮,否则将其变灰。
  • FE上的设计需要1、2、3 ... 50这样的分页

标签: java oracle pagination


【解决方案1】:

如果数据库中有大量数据,第二种解决方案将非常昂贵。

但是,第一个解决方案非常适合其中一些 tweeks。您不需要使用相同的参数第二次查询数据库,而是服务器应该在每个请求中发送 TOTAL_COUNT 并且应该缓存该值。

如果计数没有改变,由于缓存,数据库不会有负载。

【讨论】:

  • 您能否详细说明您的陈述“如果计数未更改,则由于缓存将不会加载到数据库”
  • 如果需要任何必要的编辑,答案对他们开放:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2022-11-22
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多