2017-02-15 70 views
1

我有從數據庫檢索數據(項目)的分頁要求。 UI還包含搜索選項和數據量,順序也取決於搜索條件。分頁的數據問題:java + oracle sql

比方說,一個客戶發送請求與一些搜索條件,並得到60個結果。客戶端查看1到maxPageSize的項目(默認爲25)。如果第二頁被請求 - 26-50項將被顯示。 問題是目前我無法獲得最大結果數量,也無法顯示maxPage的數量。

我看到了這個問題的解決方案2:

  1. 查詢數據庫,第二次用同樣的參數,但沒有 分頁,並獲得項目的數量。
  2. 檢索數據庫中的所有項目, 按照搜索條件在後端代碼上過濾它們併發送給客戶端。

的問題是:

1)操作的是較便宜的一般?

2)如果有更好的解決方案,還有什麼可以解決這類任務?

P.S.在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 ? 
+0

爲什麼你不能得到結果的總數?但更重要的是,爲什麼你甚至需要它?只需查詢26個結果,如果你回來了26,然後使下一個按鈕可見,否則灰色。 –

+0

FE上的設計需要分頁,如1,2,3 ... 50 –

回答

1

二的解決辦法是在情況下,有數據的批量量在數據庫相當昂貴。

但是,第一種解決方案非常適合其中的一些微調。您不需要使用相同的參數第二次查詢數據庫,而是服務器應該在每個請求中發送TOTAL_COUNT,並且應該緩存該值。

如果計數沒有改變,由於緩存,數據庫不會有負載。

+0

您能否詳細說明您的陳述「如果計數沒有改變,由於緩存將不會有數據庫負載」 – BobC

+0

如果有必要編輯是必需的,答案是開放的:) –