用戶指定pageNow-->用戶選擇rowCount-->從表中查詢出來pageCount-->計(jì)算出來pageCount的計(jì)算方法if(rowCount%pageSize==0){pageCount=rowCount/pageSize;}else{" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

關(guān)于分頁算法的詳細(xì)說明

系統(tǒng) 1804 0

這種model1模式頁面顯示和分頁的業(yè)務(wù)邏輯混合在一起.比較簡單.

但是代碼可讀性很差,而且不容易維護(hù).

?

在韓順平SERVLET教程的第四講中有明確的說明.

晚上弄清楚算法,貼過來.

?

需要4個參數(shù)

pageSize --> 用戶指定

pageNow --> 用戶選擇

rowCount --> 從表中查詢出來

pageCount --> 計(jì)算出來

?

pageCount的計(jì)算方法

if (rowCount % pageSize == 0) {

??? pageCount = rowCount / pageSize;

}else {

??? pageCOunt = rowCount / pageSize + 1;

}

?

說明:如果用戶的表中有9條記錄,即rowCount =? 9,pageSize = 3的話,那么pageCount就為3,正確

??????? 如果pageSize = 4,rowCount / pageSize取整也是2,+1后共3頁.正確.

?

針對上面的算法,很自然的想到下面的SQL語句

select 字段表名 from 表名 where id bwteen ? and ?

比如顯示第三頁(pageSize = 3)的話,那么就是

select * from user where userId bwteen 7 and 9;

但是有這樣一個問題,如果userId被刪除掉或者不連續(xù)的話,那么返回的結(jié)果集就是錯誤的.

?

下面列出常見的幾個數(shù)據(jù)庫的分頁SQL語句

MySQL數(shù)據(jù)庫

My sql數(shù)據(jù)庫最簡單,是利用mysql的LIMIT函數(shù),LIMIT [offset,] rows

從數(shù)據(jù)庫表中M條記錄開始檢索N條記錄的語句為:

  SELECT * FROM 表名稱 LIMIT M,N

  例如從表Sys_option(主鍵為sys_id)中從10條記錄還是檢索20條記錄,語句如下:

  select * from sys_option limit 10,20

例如要從"品種"表里檢索,語句為

sql = "select * from pinzhong limit?"+pageSize+","+pageSize*(pageNow-1)+"? " ;

?

在我們使用查詢語句的時候,經(jīng)常要返回前幾條或者中間某幾行數(shù)據(jù),這個時候怎么辦呢?不用擔(dān)心, mysql 已經(jīng)為我們提供了這樣一個功能。

SELECT ? * ? FROM ? table ??LIMIT? [ offset, ] ?rows? | ?rows?OFFSET?offset


LIMIT 子句可以被用于強(qiáng)制 SELECT 語句返回指定的記錄數(shù)。LIMIT 接受一個或兩個數(shù)字參數(shù)。參數(shù)必須是一個整數(shù)常量。如果給定兩個參數(shù),第一個參數(shù)指定第一個返回記錄行的偏移量,第二個參數(shù)指定返回記錄行的最大數(shù)目。初始記錄行的偏移量是 0(而不是 1): 為了與 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

mysql > ? SELECT ? * ? FROM ? table ?LIMIT? 5 , 10 ;?? // ?檢索記錄行? 6 - 15

// 為了檢索從某一個偏移量到記錄集的結(jié)束所有的記錄行,可以指定第二個參數(shù)為? - 1 :?
mysql
> ? SELECT ? * ? FROM ? table ?LIMIT? 95 , - 1 ;? // ?檢索記錄行? 96 - last.

// 如果只給定一個參數(shù),它表示返回最大的記錄行數(shù)目:?
mysql
> ? SELECT ? * ? FROM ? table ?LIMIT? 5 ;????? // 檢索前? 5 ?個記錄行

// 換句話說,LIMIT?n?等價于?LIMIT? 0 ,n。

?

SQL Server

  從數(shù)據(jù)庫表中的第M條記錄開始取N條記錄,利用Top關(guān)鍵字:注意如果Select語句中既有top,又有order by,則是從排序好的結(jié)果集中選擇:

  SELECT*
  FROM(SELECTTopN*
  FROM(SELECTTop(M+N-1)*FROM表名稱Orderby主鍵desc)t1)t2
  Orderby主鍵asc

  例如從表Sys_option(主鍵為sys_id)中從10條記錄還是檢索20條記錄,語句如下:

  SELECT*
  FROM(SELECTTOP20*
  FROM(SELECTTOP29*FROMSys_optionorderbysys_iddesc)t1)t2
  Orderbysys_idasc

Oralce數(shù)據(jù)庫

  從數(shù)據(jù)庫表中第M條記錄開始檢索N條記錄

  SELECT*
  FROM(SELECTROWNUMr,t1.*From表名稱t1whererownum<M+N)t2
  wheret2.r>=M

  例如從表Sys_option(主鍵為sys_id)中從10條記錄還是檢索20條記錄,語句如下:

  SELECT*
  FROM(SELECTROWNUMR,t1.*FromSys_optionwhererownum<30)t2
  Wheret2.R>=10

?

?

在mysql數(shù)據(jù)庫中分頁實(shí)例

    		response.setContentType("text/html;charset=gbk") ;
		request.setCharacterEncoding("gbk") ;

		PrintWriter pw = response.getWriter() ;

		//定義連接數(shù)據(jù)庫所需要的幾個常量
		final String DBDriver = "com.mysql.jdbc.Driver";
		final String DBURL = "jdbc:mysql://localhost:3306/test";
		final String user = "";
		final String password = "";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		

		try {
			//定義分頁所需要的幾個變量
			int pageCount = 0;
			int pageSize = 3;
			int rowCount = 0;
			int pageNow = 1;
			
			//動態(tài)的接收pageNow,實(shí)現(xiàn)分頁的實(shí)時功能
			String spageNow = request.getParameter("pageNow") ;
			
			if(spageNow != null) {
				pageNow = Integer.parseInt(spageNow) ;
			}

			Class.forName(DBDriver).newInstance();
			conn = DriverManager.getConnection(DBURL, user, password);

			String sql_count = "select count(*) from pinzhong"; //取得當(dāng)前表中總的記錄數(shù)

			ps = conn.prepareStatement(sql_count);
			rs = ps.executeQuery();

			//取得rowCount
			if (rs.next()) {
				rowCount = rs.getInt(1);
			}

			//計(jì)算pageCount 
			if ((rowCount % pageSize) == 0) {
				pageCount = rowCount / pageSize;
			} else {
				pageCount = rowCount / pageSize + 1;
			}

			System.out.println("pageSize->" + pageSize) ;
			System.out.println("pageCount->" + pageCount) ;
			System.out.println("pageSize*(pageNow-1)->" + pageSize*(pageNow-1)) ;
			System.out.println("spageNow->" + spageNow) ;
			
			String sql_do = "select * from pinzhong limit "+pageSize*(pageNow-1)+" , "+pageSize+" " ;
			ps = conn.prepareStatement(sql_do);
			rs = ps.executeQuery();
			
			pw.println("共有" + pageCount +"頁") ;
			pw.println("<table border=1>") ;
			pw.println("<tr><th>id</th><th>品種</th></tr>") ;
			
			while(rs.next()) {
				pw.println("<tr>") ;
				pw.println("<td>"+rs.getInt(1)+"</td>") ;
				pw.println("<td>"+rs.getString(2)+"</td>") ;
				pw.println("</tr>") ;
			}
			pw.println("</table>") ;
			
			//顯示上一頁
			if(pageNow != 1) {
				pw.println("<a href=wel?pageNow="+(pageNow-1)+">上一頁</a>") ;
			}
			for(int i = pageNow; i <= pageNow+4 ; i++) {
				pw.println("<a href=wel?pageNow="+i+">"+i+"</a>") ;
			}
			
			//顯示下一頁
			if(pageNow < pageCount){
				pw.println("<a href=wel?pageNow="+(pageNow+1)+">下一頁</a>") ;
			}
		} catch (Exception e) {
			e.printStackTrace() ;
		} finally {
			try {
				if (rs != null) {
					rs.close() ;
					rs = null ;
				}
				if ( ps != null) {
					ps.close() ;
					ps = null ;
				}
				if (conn != null) {
					conn.close() ;
					conn = null ;
				}
			}catch(SQLException e) {
				e.printStackTrace() ;
			}
		}



  

?

?

關(guān)于分頁算法的詳細(xì)說明


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 黑人和黑人激情一级毛片 | 国产欧美精品一区aⅴ影院 国产欧美精品一区二区 | 国产网站免费视频 | 日本特级黄毛片毛片视频 | 97免费在线观看视频 | 久久99久久99小草精品免视看 | 五月婷婷色综合 | 麻豆成人久久精品二区三区小说 | 国产xxxx做受性欧美88 | 2021国产成人综合亚洲精品 | 真正全免费视频a毛片 | 日本在线不卡免费 | 99久久综合狠狠综合久久 | 国产成人综合亚洲一区 | 91视频免费观看 | 手机看高清特黄a大片 | 婷婷精品进入 | 91在线免费播放 | 色综合天天综合网国产人 | 91在线免费公开视频 | 一区二区三区精品国产 | 欧美视频在线观看一区二区 | 久久久久青草 | 日韩欧美一区在线观看 | 麻豆精品一区二区三区免费 | 国产精品久久久久久久久久98 | 亚洲国产女人aaa毛片在线 | 日本我不卡 | 国产综合影院 | 成人网18免费视频 | 99re国产精品视频首页 | 99在线视频免费观看 | 一本一道 | 九九99九九视频在线观看 | 亚洲精品一区二 | 五月婷婷开心综合 | 欧美你懂得 | 中文字幕一区二区三区精彩视频 | 一区二区视频在线播放 | a国产成人免费视频 | a一级毛片免费播放 |