2017-02-15 10 views
1

データベースから取得したデータ(項目)のページ付けの要件があります。 UIには検索オプションとデータ量が含まれており、検索条件によっても順序が異なります。データのページ番号付け:java + oracle sql

クライアントがいくつかの検索条件でリクエストを送信し、結果が60件あるとします。クライアントは1からmaxPageSizeまでの項目を表示します(デフォルトでは25)。 2ページ目が要求された場合 - 26-50個のアイテムが表示されます。 問題は現時点で最大の結果を得ることができず、maxPageの数を表示できません。

私はこの問題の解決策2を参照してください。

  1. クエリデータベースもう一度同じパラメータではなく ページネーションがなく、アイテムの数を取得します。
  2. DBからすべてのアイテムを取得すると、 が検索基準でバックエンドコードにフィルタリングされ、クライアントに送信されます。

質問は以下のとおりです。

1)一般的に安価で操作のどれですか?

2)この種のタスクを解決するには、より良い解決策があれば、他に何ができますか?

P. Javaで書かれたバックエンド・コードは、JDBC経由でOracle 11g DBに送られます。

--- EDIT ---

私は、この問題をこのように解決してきました:

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

大量のデータ量がデータベースに存在している場合には第二の溶液は非常に高価です。

しかし、第1の解決策は、その中のいくつかのツイークではかなり適しています。同じパラメータを使用してデータベースを2回目にクエリする必要はなく、サーバーは各要求でTOTAL_COUNTを送信し、値をキャッシュする必要があります。

カウントが変更されていない場合、キャッシングのためにデータベースに負荷がかかりません。

+0

"カウントが変更されていない場合、キャッシングのためにデータベースに負荷がかからない" – BobC

+0

編集が必要です。答えはそれらに公開されています:) –

関連する問題