Bir Java-EE uygulamasında çalışıyorum ve bir anahtar sözcük aramasının sonucu olarak verileri bir html sayfasına filtreliyorum. Milyonlarca kayıt eşleşmesi olabilir, ancak hepsini bir defada ön tarafa getirmek istemiyorum. Ama aynı zamanda sayfalama yapmak için kayıt sayısını bilmem gerekiyor. Bunu çok fazla ağ trafiği yapmadan gerçekleştirmek için herhangi bir fikir? Veri tabanı Oracle SQL 11g'dir. Program struts 1.3 çerçevesini takip ediyor.Dizin Oluşturma ve Sayfalandırma
cevap
bir cevap bulundu ve :)
SELECT * FROM
(
SELECT a.*, rownum r__
FROM
(
SELECT CATEGORY.*,rownum FROM CATEGORY
ORDER BY CATNAME ASC
) a
WHERE rownum < ((pageno * pagesize) + 1)
)
WHERE r__ >= (((pageno-1) * pagesize) + 1)
Kesinlikle tüm sorgu sonucunu istemciye göndermemelisiniz. Eğer COUNT
- olsun numarasını: Sen 2 sorguları yapabilirsiniz u yapacağız controller içerisinde
getCustomers(String keyword, int start,int end){ // get all customers // sublist the result and get the data from start index to end index // Or U cane use a query using LIMIT }
: - sayfa 1 kayıtlar 1'den 30.
Yanıtladığınız için teşekkürler. Sayıları kullanarak ve tüm kayıtları getirirken satır sayısı alınırken aynı zaman miktarı almıyor mu? – Bhugy
en iyi yol olarak ek parametreler örneğin & ucunu başlamak olduğunuz DAO'sunda bir yöntem oluşturmaktır Neredeyse aynıdır ve POST veya GET isteği ile başlangıç ve bitiş parametreleri verecektir. }
şimdi size jsp dosya üzerinde müşterilerin kaydın bir parçası olması ve bu sublisted sonucu :)
Kullanım ayrı sorgu satırları saymak almak için nasıl görüntüleneceğini karar vermek sana kalmış.
iki farklı yaklaşımlar uygulayabilirsiniz sayfalama uygulamak için:1) kullanarak ROWNUM:
select *
from (select /*+ FIRST_ROWS(n) */
a.*, ROWNUM rnum
from (/*your_query_goes_here,
with order by*/) a
where ROWNUM <= :MAX_ROW_TO_FETCH)
where rnum >= :MIN_ROW_TO_FETCH;
: MAX_ROW_TO_FETCH getir-eğer sen istediği sonuç kümesinin son satıra ayarlanır: MIN_ROW_TO_FETCH almak için ayarlanmış sonucunun ilk satırda ayarlanır
2) FETCH OFFSET kullanımı:
select /*your_query_goes_here, with order by*/ fetch first :ROWS_PER_PAGE rows only
Bu, tablonun satırında belirtilen sıraya göre tablonun ilk N satırını (N = ROWS_PER_PAGE) gösterecektir.
select /*your_query_goes_here, with order by*/ offset (:PAGE_NUMBER - 1) * :ROWS_PER_PAGE fetch first :ROWS_PER_PAGE rows only
Bu (sıralanmış sırayla) tabloya ofset ve daha sonra tablo bir sonraki N satır almak olacaktır.
Cevabınız için teşekkürler ... ofset getirme Oracle 11g'de çalışıyor mu? – Bhugy
Emin değilim ... Ve şu anda kontrol edemedim. –
Herhangi bir sayfada eşleşen sonuçları almak ve bu sonuçların sayısını 1 okumak için okuyun.
Şimdi, bir sayfa varsayılarak 10 öğe bulunacaktır.
Sen Bu prosedür PROC_TEST çağrı ve sayma görevi gerçekleştirir
CREATE OR REPLACE PROCEDURE PROC_TEST (V_PAGE_NUMBER IN NUMBER,
V_RESULTS OUT SYS_REFCURSOR,
V_RESULT_COUNT OUT NUMBER) IS
BEGIN
OPEN V_RESULTS FOR
SELECT T.*
FROM (SELECT T.*, ROWNUM ROWNUMBER
FROM DJ_NSRXX T
WHERE ROWNUM <= V_PAGE_NUMBER * 10) T
WHERE ROWNUMBER > 10 * (V_PAGE_NUMBER - 1);
SELECT COUNT(*) INTO V_RESULT_COUNT FROM DJ_NSRXX;
END;
kullanarak beklediğiniz alabilir.
servlet ve GSON ile Datatable uygulamak en iyi örnek buraya bakınız çalışıyor: http://stackoverflow.com/questions/23110665/limit-of-displaying- satırlar-in-datatables. –