王朝网络
分享
 
 
 

我终于理解了JSP 的分页了

王朝java/jsp·作者佚名  2006-01-31
宽屏版  字体: |||超大  

我们查询数据库的时候,如果查询出来的结果是很多条,比如1000条,那么,如果都显示到一个页面上简直是令人无法忍受的事情!所以我们要分页显示,每页显示10或20行,分页的目的就这样简单.

分页的方法有很多种,也许有些效率要高些,我这里只能参考最简单能实现的方法:现查询出有多少条记录,然后计算出一共分几页,然后分别显示每一页.

查询出有多少条记录:

select count(*)from learning

计算分多少页:

if(counts%pageSizes==0){pageCounts=counts/pageSizes;}

else{pageCounts=counts/pageSizes+1;}

int i=(intPage-1)*pageSizes;(书上的算法很笨,用我这里自己想的,没有错)

上面就是判断是否最后一页显示满,如, 93条记录,每页显示5条,那么最后一页要显示3条,一共19页显示!开始考虑的时候我考虑100页,哈哈,很特殊的,不具有代表性,看来思维的方法很重要,弱智吧?

然后就是分别显示这些页了,

String query=" Select * "+

" from learning "+

" where article_id like '%' ";

这里我们遇到麻烦了,如何显示?是先查出5条放在哪里?一个什么样的数据结构里?还是划分数据库的记录的条数?也许从这里我们可以考虑出分页至少有2种方法:这里我们采用后一种,这种方法的内容是:rs的遍历和每页多少条记录的结合:

int i=(intPage-1)*pageSizes;//判断每一页能遍历到第几条记录

ps=conn.prepareStatement(query);

ResultSet rs1=ps.executeQuery();

for( int j=0; j<i ; j++)

rs1.next();//当是第一页的时候,rs从第0条开始,如果是第二页,从第(2-1)*5条元组开始遍历,如果第3页,将从第10条开始遍历

最后: while(rs1.next()&&i<pageSizes){ i++;}很关键,即控制了每页显示的条数,又控制了编历的范围.

最后有一个问题是: ResultSet rs1 为什么不用原先的rs?如果不理解这个,可以说没有理解到这种分页的做法,因为rs在查询记录总数的时候已经指向了第一个,如果继续使用,将从查询出来的第二条记录开始显示了!这个问题是我刚调试好分页时候出现的bug,看来都是先出现问题,再分析原因,再真正理解过程产生的原因.

下面还要在显示分页的内容之外加一个from , 里面提供链接来对当前页数的id+1(减1)来显示上一页或下一页的内容!

刚理解了分页,就马上记下来,加深印象,更不敢独享领悟后的喜悦!

以下是JSP 分页的代码:

*****************************

<%Cookie cookies[]=request.getCookies();

if(cookies==null)

{ response.sendRedirect("login.jsp"); }

%>

<%@ include file="articleconn.jsp"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=big5">

<title>管理文件</title>

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<!--link rel="stylesheet" href="css/article.css"-->

</head>

<%

request.setCharacterEncoding("big5");

String query=" Select * "+

" from learning "+

" where article_id like '%' ";

String queryCount=" select count(*)from learning ";

String strPage=request.getParameter("strPage");

int intPage;

if(strPage==null){

intPage=1;}

else

intPage=Integer.parseInt(strPage);

int pageSizes=5;

int counts=1;

int pageCounts=1;

try{

PreparedStatement ps=conn.prepareStatement(queryCount);

ResultSet rs=ps.executeQuery();

if(rs.next()){

counts=Integer.parseInt(rs.getString(1));}

%>

<body bgcolor="#FFFFFF">

<p>&nbsp;</p>

<table width="700" border="1" cellspacing="0" cellpadding="0" align="center" bordercolorlight="#000000" bordercolordark="#FFFFFF">

<tr bgcolor="#99CCFF">

<td height="10" bgcolor="#B5D85E">

<div align="center">

<b>管 理 界 面</b>

</div>

</td>

</tr>

<tr>

<td height="49">

<%-- 分頁 --%>

<p align="left">

<a href="add.jsp">添加信息</a>

<a href="index.jsp">返回首頁</a>

</p>

<table border="1" cellspacing="0" width="90%" bgcolor="#F0F8FF" bordercolorlight="#000000" bordercolordark="#FFFFFF" align="center">

<tr>

<td width="12%" align="center">

<strong>ID 號</strong>

</td>

<td width="13%" align="center">

<b>類 型</b>

</td>

<td width="47%" align="center">

<strong>信 息 名 稱</strong>

</td>

<td width="14%" align="center">

<strong>修 改</strong>

</td>

<td width="14%" align="center">

<strong>刪 除</strong>

</td>

</tr>

<%

if(counts%pageSizes==0){pageCounts=counts/pageSizes;}

else{pageCounts=counts/pageSizes+1;}

int i=(intPage-1)*pageSizes;

ps=conn.prepareStatement(query);

ResultSet rs1=ps.executeQuery();

for( int j=0; j<i ; j++)

rs1.next();

out.println(rs+"<BR><BR><BR> ");

out.println(rs.next());

i=0;

while(rs1.next()&&i<pageSizes){

%>

<tr>

<td width="12%" height="7">

<p align="center">

<%= rs1.getString("article_id")%>

</p>

</td>

<td width="13%" height="7">

<div align="center">

<%= rs1.getString("types")%>

</div>

</td>

<td width="47%" height="7">

<%= rs1.getString("title")%>

</td>

<td width="14%" align="center" height="7">

<a href="edit.jsp?id=<%=rs1.getString("article_id")%>">修 改</a>

</td>

<td width="14%" align="center" height="7">

<a href="delete.jsp?id=<%=rs1.getString("article_id")%>">刪 除</a>

</td>

</tr>

<% i++;}%>

</table>

<%

}

catch(SQLException se1){se1.printStackTrace();}

finally{}

stmt.close();

conn.close();

%>

</td>

</tr>

</table>

<form action="manage.jsp" method="post" >

第<%=intPage%>頁,共<%=pageCounts%>頁

<%

if(intPage<pageCounts)

%><a href="manage.jsp?strPage=<%=intPage+1%>">下一頁</a>

<%if(intPage>1)%>

<a href="manage.jsp?strPage=<%=intPage-1%>">上一頁</a>

</form>

<P>&nbsp;</P>

</body>

</html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有