欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
中國DotNet俱樂(lè )部——首頁(yè)

關(guān)于JAVA的分頁(yè)查詢(xún)操作技術(shù)


  發(fā)表時(shí)間:2004-8-10
作者:未知[獲得此文檔時(shí)候沒(méi)有作者記錄,深感抱歉,本文檔全為轉載]
  

網(wǎng)上看到的一篇文章,結合自己的經(jīng)驗和大家交流一下

對大量數據的分頁(yè)處理問(wèn)題描述:背景1:一客戶(hù)通過(guò)IE請求Web服務(wù)器查詢(xún)數據,而查詢(xún)結果是上千條甚至是上萬(wàn)條記錄,要求查詢(xún)結果傳送到IE客戶(hù)端并分頁(yè)顯示。背景2:一客戶(hù)通過(guò)IE或者其他方式請求Web服務(wù)器查詢(xún)數據,而查詢(xún)結果是上千條甚至是上萬(wàn)條記錄,并要求查詢(xún)結果把包傳送到客戶(hù)的E-mail中。問(wèn):對于這樣的有大量數據的結果集,在Web服務(wù)器端如何有效的處理?可能涉及到的問(wèn)題:1. 內存占用大量數據的結果集,可能要占用非常大的內存2. 傳輸速度及策略具體的分頁(yè)處理技術(shù)

處理方法1 游標查詢(xún) 直接使用ResultSet來(lái)處理。ResultSet是直接在數據庫上建立游標,然后通過(guò)ResultSet的行位置定位接口來(lái)獲得指定行位置的記錄。當用戶(hù)第一請求數據查詢(xún)時(shí),就執行SQL語(yǔ)句查詢(xún),獲得的ResultSet對象及其要使用的連接對象都保存到其對應的會(huì )話(huà)對象中。以后的分頁(yè)查詢(xún)都通過(guò)第一次執行SQL獲得的ResultSet對象定位取得指定行位置的記錄。最后在用戶(hù)不再進(jìn)行分頁(yè)查詢(xún)時(shí)或會(huì )話(huà)關(guān)閉時(shí),釋放數據庫連接和ResultSet對象等數據庫訪(fǎng)問(wèn)資源。說(shuō)明:在用例分頁(yè)查詢(xún)的整個(gè)會(huì )話(huà)期間,一個(gè)用戶(hù)的分頁(yè)查詢(xún)就要占用一個(gè)數據庫連接對象和結果集的游標,這種方式對數據庫的訪(fǎng)問(wèn)資源占用比較大,并且其利用率不是很高。 所有的數據庫產(chǎn)品。 優(yōu)點(diǎn):減少了數據庫連接對象的多次分配獲取,減少了對數據庫的SQL查詢(xún)執行。缺點(diǎn):占用數據庫訪(fǎng)問(wèn)資源-數據庫連接對象,并占用了數據庫上的資源-游標。而這些資源都是十分寶貴的有限制的。結論:這種的數據庫查詢(xún)分頁(yè)處理方式不是最佳的。一般不適用這種方式。

2 定位行集SQL查詢(xún) 主要是直接使用數據庫產(chǎn)品的提供的對查詢(xún)的結果集可定位行范圍的SQL接口技術(shù)。在用戶(hù)的分頁(yè)面查詢(xún)請求中,每次可取得查詢(xún)請求的行范圍的參數,然后使用這些參數生產(chǎn)取得指定行范圍的的SQL查詢(xún)語(yǔ)句,然后每次請求獲得一個(gè)數據庫連接對象并執行SQL查詢(xún),把查詢(xún)的結果返回給用戶(hù),最后釋放說(shuō)有的數據庫訪(fǎng)問(wèn)資源。說(shuō)明:這種方式需要每次請求時(shí)都要執行數據庫的SQL查詢(xún)語(yǔ)句;對數據庫的訪(fǎng)問(wèn)資源是使用完就立即釋放,不白白占用數據庫訪(fǎng)問(wèn)資源。 對特定(提供了對查詢(xún)結果集可定位功能的)的數據庫產(chǎn)品。如:Oracle,DB2, PostgreSQL,mySQL等。(MS SQL Server 沒(méi)有提供此技術(shù)。) 如:1. Oracle數據庫使用關(guān)鍵字:rowid或rownum 2. DB2:rowid或rownum ()3. PostgreSQL 使用LIMIT 和 OFFSET4. MySQL 使用Limit 優(yōu)點(diǎn):這種技術(shù)是直接使用數據庫產(chǎn)品自己提供的可對查詢(xún)結果集定位行范圍過(guò)濾的功能,因此直接利用了數據庫的性能對此分頁(yè)查詢(xún)的優(yōu)化功能。對數據庫的訪(fǎng)問(wèn)資源(數據庫連接對象,數據庫游標等)沒(méi)有浪費,這些資源的充分重復的利用。對查詢(xún)的結果對Web容器沒(méi)有什么特別要求。缺點(diǎn):要執行多次數據庫SQL查詢(xún)操作。對每次的分頁(yè)面操作請求都要指定相應范圍的結果集來(lái)執行SQL語(yǔ)句的數據庫查詢(xún)操作,這對數據庫有一定的影響。對每次分頁(yè)面查詢(xún)請求要頻繁的從Web容器中獲得數據庫訪(fǎng)問(wèn)資源(數據庫連接對象和數據庫游標)。要依賴(lài)于具體的數據庫產(chǎn)品。因為對沒(méi)有實(shí)現沒(méi)有提供此技術(shù)的數據庫產(chǎn)品不能使用此方式。結論:由于每次對數據庫的SQL查詢(xún)操作相對而言耗用的數據資源比較少,并且在實(shí)際用戶(hù)的操作中,有可能用戶(hù)對查詢(xún)的所有結果集只是需要查看其中的部分頁(yè)面。因此這種方式是最佳的。

3 特別處理的定位行集SQL查詢(xún) 這種方式是在方式2的基礎上針對不提供對查詢(xún)結果集行范圍定位的數據庫產(chǎn)品。其在Web容器端的操作邏輯大致和方式2相同。只是先要對要查詢(xún)的數據庫表要有一字段的數據能區別每條不同的數據記錄。第一次查詢(xún)時(shí),獲得用來(lái)可唯一標識不同記錄的字段的所有結果集,并緩存起來(lái)以備后面的分頁(yè)面查詢(xún)指定要查詢(xún)的結果集的行范圍。 主要是針對不同對查詢(xún)行集可定位范圍獲得的數據庫產(chǎn)品,如MS SQL Server等。 假設從A,B,C三個(gè)表中選取數據。且A有字段ID用來(lái)可唯一區別不同的記錄。那么第一次查詢(xún)的時(shí)候,會(huì )查詢(xún)兩次1. select A.id from A,B,C where condition.2. 把A的ID緩存到SESSION中?3.從Session中?,F可按照次序來(lái)取得相應頁(yè)面范圍的ID來(lái),并構造下一個(gè)查詢(xún)語(yǔ)句:select A.name, B.add from A,B,C where condition && ( A.ID in 本頁(yè)面范圍的 ID )以后每次翻頁(yè)的時(shí)候,依次獲得對應頁(yè)的ID只要表中唯一的就可以了。無(wú)所謂大小,順序?這樣,SESSSION緩存的就只是一列而不是所有列了。當然,對于列數不多的,效果并不好。也可使用存儲過(guò)程實(shí)現,可參照:http://expert.csdn.net/Expert/topic/2365/2365596.xml?temp=.7529261優(yōu)點(diǎn):同方式2缺點(diǎn):同方式2;還要在要查詢(xún)的數據庫表中建立一個(gè)相應的ID,用來(lái)唯一區別每條記錄。結論:同方式2。

4 緩存一次SQL查詢(xún)的結果集 優(yōu)點(diǎn):缺點(diǎn):既然我們要緩存結果,那么用戶(hù)就可能會(huì )看到過(guò)期的數據

說(shuō)明:對于實(shí)際情況的應用來(lái)說(shuō),一般結合實(shí)際情況,結合使用方式2(或方式3)和方式4。如:一個(gè)應用場(chǎng)景:對公司的產(chǎn)品的查詢(xún)是經(jīng)常的,但是產(chǎn)品的種類(lèi)不是很多,這時(shí)可使用緩存方式;但是對有些查詢(xún)結果集較大,數據庫和Web容器之間的網(wǎng)絡(luò )訪(fǎng)問(wèn)由可能是遠程的,這時(shí)候可考慮使方式2(或者方式3)。

//-----------------------------------------------------------

以前做的幾個(gè)項目中,大多數都是采用類(lèi)似于方式1的分頁(yè)。如果查詢(xún)頻繁的話(huà),系統訪(fǎng)問(wèn)速度就是問(wèn)題。

方法2確實(shí)是個(gè)好方法,但是過(guò)于依賴(lài)數據庫,并非文章中所提及的“最佳方法”。

個(gè)人認為方法1和方法2相結合,才能達到較好的效果。即先查詢(xún)出較大的結果集(可能是最大集合的1/100),然后對該結果集使用方法1的分頁(yè)。這樣既不用頻繁的訪(fǎng)問(wèn)數據庫,也不會(huì )創(chuàng )造出過(guò)多的對象。當然正如文章中提到的:MS SQL Server 不支持定位技術(shù) >_< ,所以游標的定位需要靠程序解決。

方法3好象是方法4的補充了。。。。研究ing

下面是方法4的實(shí)現//關(guān)于分頁(yè)顯示中,因對象過(guò)多而造成的系統速度過(guò)慢問(wèn)題的修改,適合數據庫更新不頻繁的情況

//得到一個(gè)idListList idList = new ArrayList();rs = select id from db where conditionwhile (rs.next){  idList.add(rs.getString("id"));}

//根據idList得到formListList formList = TEST.getInstance().getInfo(idList);

//類(lèi)TEST中具體實(shí)現//創(chuàng )建唯一的instance,只有當系統第一次調用此方法,則創(chuàng )建實(shí)例Map m = new Treemap();rs = select * from dbwhile (rs.next){  TestForm testForm = new TestForm();  testForm.setvalue(...);  m.put(TestForm.getF_id(),testForm);}//根據idList從map中取得相應數據public List getInfo(List idList){  List infoList = new ArrayList();  for (int i = 0;i

//顯示formList中的內容 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JAVA技巧:Java中的大量數據查詢(xún)
JDBC常見(jiàn)面試題集錦
數據庫查詢(xún)結果分頁(yè)顯示思路
JDBC技術(shù)和數據庫連接池專(zhuān)題
實(shí)現搜索分頁(yè)查詢(xún)
Java調用存儲過(guò)程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久