分页显示 单击下一页,显示的还是第一页的内容

THJsword 2004-10-13 11:50:16
程序代码如下
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>


<%@ page contentType="text/html;charset=GB2312"%>

<body bgcolor="#FFF8DF">
按地区查询:<form method="get" action="xinxixianshigo.jsp">
<span id="cityname">
<select name="cityname" onChange="showlist();">
<option value="">请选择</option>
<option value="丽水">丽水</option>
<option value="莲都">莲都</option>
<option value="缙云">缙云</option>
<option value="遂昌">遂昌</option>
<option value="青田">青田</option>
<option value="龙泉">龙泉</option>
<option value="云和">云和</option>
<option value="庆元">庆元</option>
<option value="松阳">松阳</option>
<option value="景宁">景宁</option>
</select>
<input type=submit value="确定">
</span>

<center>
各地林业信息上报汇总
<%
int pagesize=2;//每页要显示的记录数
int recordcount=0;//记录总数
int pagecount=0;//总页数
int pageid=1;//待要显示的页码

try{
Connection con;
Statement stmt;
ResultSet rs;

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();

java.sql.DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());

String dbUrl= "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testdb";
String dbUser="sa";
String dbPwd="thjkl800216";
con=java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);//数据库连接
//stmt=con.createStatement();
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//创建一个滚动的只读sql对象
rs=stmt.executeQuery("SELECT title,describe,cityname,depart,author,pdate from xinxi_table order by id desc");
rs.last();//到达记录的末尾

recordcount=rs.getRow();//获得记录总数
pagecount=(recordcount%pagesize==0)?(recordcount/pagesize):((recordcount/pagesize)+1);//取得总的页面数
int count=1;
String strpage=request.getParameter("pageid");//从Url中获取pageid的值
if(strpage==null) pageid=1;
else
pageid=Integer.parseInt(strpage);//将得到的数转换为整型

if(pageid>recordcount) pageid=recordcount;
if(recordcount>0){
rs.absolute((pageid-1)*pagesize+1);
}
int i=0;
rs.beforeFirst();
while (rs.next()&&count<=pagesize)
{
count++;
i++;
String col1=rs.getString(1);
String col2=rs.getString(2);
String col3=rs.getString(3);
String col4=rs.getString(4);
String col5=rs.getString(5);
String col6=rs.getString(6);

out.println("<table border=1 width=500>"+"<tr><td width=80>标   题:"+"</td><td>"+col1+"</td></tr><tr><td>内  容:"+"</td><td>"+col2+"</td></tr><tr><td>上报地区:"+"</td><td>"+col3+"</td></tr><tr><td>上报单位:"+"</td><td>"+col4+"</td></tr><tr><td>上报人:"+"</td><td>"+col5+"</td></tr><tr><td>上报时间:"+"</td><td>"+col6+"</td></tr>");
out.println("</table>");
out.println("<br>");
}


out.print("共");
out.print(pagecount);
out.print("页");

out.print("共");
out.print(recordcount);
out.print("条");

out.print("第");
out.print(pageid);
out.print("页");

// out.print("<br>");
if(pageid<pagecount)
{
out.print("<a href=xs_back.jsp?pageid=");
out.print(pageid+1);
out.print(">下一页</a>");
}
if(pageid>1){
out.print("<a href=xs_back.jsp?pageid=");
out.print(pageid-1);
out.print(">上一页</a>");}
out.print("<br>");
for(int j=1;j<=pagecount;j++){
out.print("<a href=xs_back.jsp?pageid=");
out.print(j);
out.print(">");
out.print(j);
out.print("</a>");}

rs.close();
stmt.close();
con.close();
}
catch(Exception e){out.println(e.getMessage());}
%>

<hr>
<a href="xinxi.jsp">返回</a>
</center>
</body>

程序能够正确执行,但是单击下一页这个链接时,页面显示的内容仍然是第一页的内容,但是url中显示的page已经等于2了。请问大家我哪儿写错了。
...全文
409 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
squares 2004-10-13
说说你这个问题,首先,你的这个写法,类似于asp,java没有必要这么写,另外,为什么数据还是第一个,你可以这样取出记录,计算页数×每页条数得到一个数,以这个数的起始来取 每页条数,这样效率最高而且也不用这么麻烦了
回复
AHUA1001 2004-10-13
点击下一页的时候页面是否刷新?
要是不刷新,就是提交的问题。
要是刷新了,就是值传的不对,或者接收值处理有问题。
回复
yunxiang 2004-10-13
if(recordcount>0){
rs.absolute((pageid-1)*pagesize+1);
}
int i=0;

//rs.beforeFirst(); // 这里注释掉看看。。。。。。。
回复
romeo00001 2004-10-13
if(strpage==null) pageid=1;
把strpage 打印出来看看。。
回复
THJsword 2004-10-13
知道怎么写了。呵呵
int j=(pageid-1)*pagesize;
if(j==0)
rs.beforeFirst();
else
rs.absolute(j);

这样就可以正确显示了。
回复
THJsword 2004-10-13
如果这样的话,当pageid=1时,这个参数不就等于0了?

改完后,报错
[Microsoft][SQLServer 2000 Driver for JDBC]0 is not a valid row parameter value for the ResultSet.Absolute method.
回复
yunxiang 2004-10-13
rs.absolute((pageid-1)*pagesize+1);

改为
rs.absolute((pageid-1)*pagesize);
回复
THJsword 2004-10-13
错了,是第一条记录显示不出来。
回复
THJsword 2004-10-13
页面中会返回共有几条记录,这个是能够正确显示的
但是页面上并不能显示出最后一条记录的信息。显示的是空白,好像是最后一条数据记录没访问到,可是页面上返回的总记录数是正确的。

奇怪了
回复
THJsword 2004-10-13
对 yunxiang(*****)
照你写的是对的,不过问题又出来了,为什么最后一条记录总是出不来呢?
每次显示完以后,总找不到最后一条记录。
回复
arrowkl 2004-10-13
对,楼上的很对,照你的写法是对的。
回复
yunxiang 2004-10-13
if(recordcount>0){
rs.absolute((pageid-1)*pagesize+1);
}
int i=0;

//rs.beforeFirst(); // 这里注释掉看看。。。。。。。

这样你测试过么?还是一样的结果么?

我认为:本来你已经把rs定位到了相应的位置,可是你又从新rs.beforeFirst();
这样就会使rs又从新回到了开始位置。
回复
THJsword 2004-10-13
刚开始学,很多东西还不是很有概念。
我的这个程序就是搞不明白了,页面应该刷新了,因为pageid的值在变化,可是数据显示仍然只显示第一页的。纳闷了。
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告