av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

淺談SQL Server 2000下JDBC查詢分頁解決方案

先在項(xiàng)目的classpath中添加msbase.jar,mssqlserver.jar,msutil.jar 怎么來的就不多廢話了。需要說的是我***用的SQL Server 2005 JDBC查詢驅(qū)動(dòng)sqlJDBC.jar放到項(xiàng)目中,后來的程序是報(bào)錯(cuò)的?;仡^想想,報(bào)錯(cuò)有理,SQL Server 2005 已經(jīng)支持rownum 分頁了。

創(chuàng)新互聯(lián)是一家專業(yè)提供霸州企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為霸州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

先說說SQL Server 2000的分頁的實(shí)現(xiàn),目前實(shí)現(xiàn)方法大概是那三種。我個(gè)人還是喜歡使用存儲(chǔ)過程,原因是使用非常方便,至于使用的存儲(chǔ)過程,這里還是放出來看看,估計(jì)大家用的都大同小異。

 
 
 
  1. IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Pr_QueryByPage]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)  
  2. BEGIN  
  3. EXEC dbo.sp_executesql @statement = N'create    procedure  [dbo].[Pr_QueryByPage]    
  4. @sqlstr  nvarchar(4000),  --查詢sql    
  5. @currentpage  int, --第頁記錄條數(shù)    
  6. @pagesize  int --每頁顯示記錄   
  7. as    
  8. set  nocount  on    
  9. declare  @P1  int, --P1是游標(biāo)的ID    
  10. @rowcount  int    
  11. exec  sp_cursoropen  @P1  output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount  output    
  12. select  ceiling(1.0*@rowcount/@pagesize)  as TotalPage,@rowcount as [RowCount]   
  13. set  @currentpage=(@currentpage-1)*@pagesize+1    
  14. exec  sp_cursorfetch  @P1,16,@currentpage,@pagesize      
  15. exec  sp_cursorclose  @P1    
  16. set  nocount  off  '   
  17. END  
  18. GO 

這個(gè)存儲(chǔ)過程的實(shí)現(xiàn),使用了三個(gè)系統(tǒng)存儲(chǔ)過程sp_cursoropen ,sp_cursorfetch ,sp_cursorclose 從字面上的意思大概是他叫結(jié)果集使用游標(biāo)打開,然后讀取其中的@pageSize條記錄,所以單從查詢上來講,性能是不及使用select top 之類的實(shí)現(xiàn)。

使用起來非常容易,exec Pr_QueryByPage 'select * from yourtable',1,10  就可以了麻煩的是他返回的是三張表。***張表是查詢的表,但是沒有記錄。第二個(gè)表一行兩列,***個(gè)列是總頁數(shù),第二個(gè)列是總記錄條數(shù)。第三張表才是需要的數(shù)據(jù)。這就造成了取的時(shí)候有點(diǎn)小麻煩,因?yàn)橹爸恢溃?net中可以直接fill(DataSet),然后DataSet里面可取DataTable。但是在JDBC里面我映像中ResultSet 只能容一張表。后來找了一些資料,原來PreparedStatement,CallableStatement,Statement都支持查詢返回多個(gè)ResultSet ,好了,非常好。 下面是我使用CallableStatemnt取到的結(jié)果集。

 
 
 
  1. CallableStatement cs = conn.prepareCall("exec Pr_QueryByPage 'select * from ckdmzd',1,10");  
  2.             ResultSet rs = null;  
  3.             /**  
  4.             * execute returns :  
  5.             *    true : returns ResultSet(s)  
  6.             *  false: returns rows affected  
  7.             */  
  8.             boolean hasResultSet = cs.execute();  
  9.             if(hasResultSet){  
  10.                 /**  
  11.                 * skip the first ResultSet  
  12.                 */  
  13.                 rs=cs.getResultSet();  
  14.                 /**  
  15.                 * second ResultSet : pageCount & recordCount  
  16.                 */  
  17.                 if(cs.getMoreResults()){  
  18.                     rs=cs.getResultSet();  
  19.                     while(rs.next()){  
  20.                         String pageCount=rs.getString(1);  
  21.                         String recordCount=rs.getString(2);  
  22.                     }  
  23.                 }  
  24.                 /**  
  25.                 * the thrid one is the paged result  
  26.                 */  
  27.                 if(cs.getMoreResults()){  
  28.                     rs=cs.getResultSet();  
  29.                     while(rs.next()){  
  30.                         // do somthing with ResultSet  
  31.                     }  
  32.                 }  
  33.             } 

這樣就實(shí)現(xiàn)了分頁,網(wǎng)上很多人測試了,這個(gè)方法的性能不及別的方法,這里我要指出的是,別的方法是不能返回總的記錄條數(shù)的。而要知道總的記錄條數(shù),通常需要select count(*) from ( your sql) 這兩次查詢叫起來的時(shí)間未必會(huì)少。

JDBC查詢總結(jié)

使用上述方法實(shí)現(xiàn)SQL Server 2000 JDBC查詢分頁,使用方便,性能還說的過去。我不知道SQL Server 2005 的查詢性能是否又提升。

【編輯推薦】

  1. 使用JDBC的五個(gè)精華功能
  2. Tomcat5+MySQL JDBC連接池配置
  3. 在Weblogic中實(shí)現(xiàn)JDBC的功能
  4. 詳解JDBC與Hibernate區(qū)別
  5. JDBC連接MySQL數(shù)據(jù)庫關(guān)鍵四步
  6. 淺談JDBC DAO的設(shè)計(jì)理念

文章名稱:淺談SQL Server 2000下JDBC查詢分頁解決方案
網(wǎng)頁鏈接:http://uogjgqi.cn/article/dpejcdd.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流