在书上看到一段代码,JSP分页.设计是每页显示5条记录.第一页从第1条显示到第5条记录.而第二页从第5条显示到第9条.可是在我测试时,当数据库中共有10条记录时,出现问题,看不到第10条记录.两个页面共显示9条记录,就没有第三页了.请各位看看.哪出了问题.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html; charset=gb2312" pageEncoding="gb2312" %>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.DataSource" %>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=GB2312" >
<title>jsp page show test</title>
</head>
<body>
<!-- 记录分页程序 -->
<%
String pageid=request.getParameter("pageid");//当前要显示的页数.第一次显示时为1,
int pagesize=5;//每页显示5条记录
int pagecount=0;//总页数
int showpage=1;
try{
//连接数据源
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)ctx.lookup("jdbc/myweb");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
//end
//发送并执行SQL语句
String strsql="SELECT * FROM product";
ResultSet rs = stmt.executeQuery(strsql);
//end
rs.last();//移到最后一条记录
int lastrow=rs.getRow();//lastrow等于最大记录指针,即记录总数
pagecount=(lastrow%pagesize==0)?(lastrow/pagesize):(lastrow/pagesize+1);
//判断pageid不管是null或者空字符""都作为第一次访问本页面而从第一页面开始显示.
if(request.getParameter("pageid")==null||pageid.equals(""))
{
pageid="1";
}
showpage=Integer.parseInt(pageid);//把字符型的pageid转换成整型
if(showpage<=1)
{
showpage=1;
}
if(showpage>=pagecount)
{
showpage=pagecount;
}
int posion=(showpage-1)*pagesize;
if(posion==0)
{
posion=1;
}
rs.absolute(posion);
out.print("数据源配置并连接成功!<BR>");
out.print("<TABLE BORDER=1 bordercolorlight=#000000>");
out.print("<TR><TD width=40>ID</TD>");
out.print("<TD WIDTH=60>代码</TD>");
out.print("<TD WIDTH=80>商品名称</TD>");
out.print("<TD WIDTH=60>品牌</TD>");
out.print("<TD WIDTH=150>产品简介</TD>");
out.print("<TD WIDTH=80>存货数量</TD>");
out.print("<TD WIDTH=80>价格</TD></TR>");
for(int i=1;i<=pagesize;i++)
{
out.print("<TR>");
out.print("<TD>"+rs.getInt(1)+"</TD>");
out.print("<TD>"+rs.getString("pdm")+"</TD>");
out.print("<TD>"+rs.getString("pname")+"</TD>");
out.print("<TD>"+rs.getString("provider")+"</TD>");
out.print("<TD>"+rs.getString("info")+"</TD>");
out.print("<TD>"+rs.getString("stock")+"</TD>");
out.print("<TD>"+rs.getString("price")+"</TD>");
out.print("</TR>");
if(!rs.next())
break;
}
out.print("</TABLE>");
rs.close();
}catch(Exception e){
out.print("不能连接到数据源");
}
/*=====================*/
out.print("<br>");
out.print("[共"+pagecount+"页]>>>");
for(int j=1;j<=pagecount;j++)
{
if(j==showpage)
{
out.print("[");
}
out.print("<A href=pageshow.jsp?pageid="+j+">");
out.print(""+j);
out.print("</A>");
if(j==showpage)
{
out.print("]");
}
out.print(" ");
}
/*================*/
%>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html; charset=gb2312" pageEncoding="gb2312" %>
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.DataSource" %>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=GB2312" >
<title>jsp page show test</title>
</head>
<body>
<!-- 记录分页程序 -->
<%
String pageid=request.getParameter("pageid");//当前要显示的页数.第一次显示时为1,
int pagesize=5;//每页显示5条记录
int pagecount=0;//总页数
int showpage=1;
try{
//连接数据源
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)ctx.lookup("jdbc/myweb");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
//end
//发送并执行SQL语句
String strsql="SELECT * FROM product";
ResultSet rs = stmt.executeQuery(strsql);
//end
rs.last();//移到最后一条记录
int lastrow=rs.getRow();//lastrow等于最大记录指针,即记录总数
pagecount=(lastrow%pagesize==0)?(lastrow/pagesize):(lastrow/pagesize+1);
//判断pageid不管是null或者空字符""都作为第一次访问本页面而从第一页面开始显示.
if(request.getParameter("pageid")==null||pageid.equals(""))
{
pageid="1";
}
showpage=Integer.parseInt(pageid);//把字符型的pageid转换成整型
if(showpage<=1)
{
showpage=1;
}
if(showpage>=pagecount)
{
showpage=pagecount;
}
int posion=(showpage-1)*pagesize;
if(posion==0)
{
posion=1;
}
rs.absolute(posion);
out.print("数据源配置并连接成功!<BR>");
out.print("<TABLE BORDER=1 bordercolorlight=#000000>");
out.print("<TR><TD width=40>ID</TD>");
out.print("<TD WIDTH=60>代码</TD>");
out.print("<TD WIDTH=80>商品名称</TD>");
out.print("<TD WIDTH=60>品牌</TD>");
out.print("<TD WIDTH=150>产品简介</TD>");
out.print("<TD WIDTH=80>存货数量</TD>");
out.print("<TD WIDTH=80>价格</TD></TR>");
for(int i=1;i<=pagesize;i++)
{
out.print("<TR>");
out.print("<TD>"+rs.getInt(1)+"</TD>");
out.print("<TD>"+rs.getString("pdm")+"</TD>");
out.print("<TD>"+rs.getString("pname")+"</TD>");
out.print("<TD>"+rs.getString("provider")+"</TD>");
out.print("<TD>"+rs.getString("info")+"</TD>");
out.print("<TD>"+rs.getString("stock")+"</TD>");
out.print("<TD>"+rs.getString("price")+"</TD>");
out.print("</TR>");
if(!rs.next())
break;
}
out.print("</TABLE>");
rs.close();
}catch(Exception e){
out.print("不能连接到数据源");
}
/*=====================*/
out.print("<br>");
out.print("[共"+pagecount+"页]>>>");
for(int j=1;j<=pagecount;j++)
{
if(j==showpage)
{
out.print("[");
}
out.print("<A href=pageshow.jsp?pageid="+j+">");
out.print(""+j);
out.print("</A>");
if(j==showpage)
{
out.print("]");
}
out.print(" ");
}
/*================*/
%>
</body>
</html>
解决方案 »
- 如何通过后台数据显示前台页面(单选,多选,下拉列表)让他们的值被选中
- 关于include的问题非用一项目 紧急!!!!!!!!!!!高手帮忙
- eclipse开发dxf文件
- 基于jsp+mysql的bbs论坛怎样打包成.exe文件
- 看书有一句话不懂,麻烦大家帮忙看看
- html:file Backspace键按下出错
- servler如何接收前台ajax xmlhttp.send("&键=值&")
- radio怎么获得值阿??????????????
- 请问ODBC源与下载的数据库驱动的区别?
- servlet 问题高分(50)
- fileupload的问题 各位高手帮忙测试下啊
- javax.mail.AuthenticationFailedException 与J2EE 5.0
????
int posion=(showpage-1)*pagesize;
if(posion==0)
{
posion=1;
}
rs.absolute(posion);
out.print("数据源配置并连接成功!<BR>");
应该改成这样:
int posion=(showpage-1)*pagesize+1;
/*
if(posion==0)
{
posion=1;
}*/
rs.absolute(posion);
out.print("数据源配置并连接成功!<BR>");
pagecount = (lastrow % pagesize == 0) ? (lastrow / pagesize) : (lastrow / pagesize + 1);
改成
pagecount = (lastrow / pagesize + 1);不过我个人认为是你那本书上的代码有BUG
第一页显示第1到第5条记录.第二页显示第5到第9条记录,那第三个页面,显示第9条和第10条,但是你的代码中有这样一句:
pagecount=(lastrow%pagesize==0)?(lastrow/pagesize):(lastrow/pagesize+1);
lastrow应该为10,pagesize应该为5,那么lastrow/pagesize应该等于2,所以pagesize=2,
而你的pagecount(等于2)表示总页数,那么何来的第三页呢,你把参数3传过去的话,在数据库中取记录的话会从11条开始取,会取不到记录,按你的意思pagecount的计算方法要做一下改动才行。
for(int j=1;j<=pagecount;j++)
{
if(j==showpage)
{
out.print("[");
}
out.print("<A href=pageshow.jsp?pageid="+j+">");
out.print(""+j);
out.print("</A>");
if(j==showpage)
{
out.print("]");
}
out.print(" ");
}
这里也只可能有1,2两个页码的,不可能会出现3的!
分页代码
author :East (张栋芳)
date: 2008-5-30
--><%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.sql.*"%>
<html>
<head><title>分页数据显示</title></head>
<body>
<center><%
int curpage=0;//当前页
int total_page=0;//总页数
int max_rows=25;//每页显示30行数据
int max_line=0;//总的行数
int number=0;
String str=request.getParameter("curpage");
if(str==null || str.equals("")){
number=(curpage)*max_rows;
curpage=1;
}else{
curpage=Integer.parseInt(str);
number=(curpage-1)*max_rows;
}
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=News";
Connection con=DriverManager.getConnection(url,"sa","");
String sql="select count(*) from bookInfo";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
rs.next();
max_line=rs.getInt(1);
System.out.println(max_line); if(max_line%max_rows==0)
total_page=max_line/max_rows;
else
total_page=max_line/max_rows+1;
String page_sql="select top "+max_rows+" * from bookInfo where id not in(select top "+number+" id from bookInfo)";
//String page_sql="select top ? * from bookInfo where id not in(select top ? id from bookInfo)";
pstmt=con.prepareStatement(page_sql);
//pstmt.setInt(1,max_rows);
//pstmt.setInt(2,number);
rs=pstmt.executeQuery();
%>
<h1>分页数据显示</h1>
<table border=1>
<tr>
<td>id 号</td>
<td>Title</td>
<td>authors</td>
<td>publish_date</td>
</tr>
<%
while(rs.next()){
%>
<tr>
<td><%=rs.getString("id")%></td>
<td><%=rs.getString("title")%></td>
<td><%=rs.getString("authors")%></td>
<td><%=rs.getString("date")%></td>
</tr>
<%
}
%>
</table>
<a href="page.jsp?curpage=<%=1%>">第一页</a>
<%
if(curpage==1){
%>
上一页
<%
}else{
%>
<a href="page.jsp?curpage=<%=curpage-1%>">上一页</a>
<%
}
%>
<%
if(curpage==total_page){
%>
下一页
<%
}else{
%>
<a href="page.jsp?curpage=<%=curpage+1%>">下一页</a>
<%
}
%>
<a href="page.jsp?curpage=<%=total_page%>">最后一页</a>
</center>
</body>
</html>