在书上看到一段代码,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>

解决方案 »

  1.   

      这个 for(int i=1;i<=pagesize;i++)你改成for(int i=0;i<pagesize;i++) 试下  然后再看下for(int j=1;j<=pagecount;j++)有没问题。  肯定就是这2个位置出现了问题
      

  2.   

     rs.absolute(posion); 你看下是不是第一条记录少了  
      

  3.   

    int posion=(showpage-1)*pagesize;
      ????
      

  4.   

    这段代码有问题:
    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>");
      

  5.   

    建议直接拼sql语句来实现分页页面只需处理当前是第几页就行了
      

  6.   

    如果每页要多显示上一页最后一条记录,那要调整总页数:
    pagecount = (lastrow % pagesize == 0) ? (lastrow / pagesize) : (lastrow / pagesize + 1);
    改成
    pagecount = (lastrow / pagesize + 1);不过我个人认为是你那本书上的代码有BUG
      

  7.   

    分页是个很麻烦的问题,建议用struts2
      

  8.   

    是不是int posion=(showpage-1)*pagesize+1;
      

  9.   

    楼主,你的pagecount表示总页数对吧,如果总共有10条记录,每页5条,按你的意思:
    第一页显示第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的计算方法要做一下改动才行。
      

  10.   

    应该是这样的吧,如果用pagecount = (lastrow % pagesize == 0) ? (lastrow / pagesize) : (lastrow / pagesize + 1);的话,十行数据只能得到是两页数据,虽然第二页显示是5-9条数据,
    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的!
      

  11.   

    <!--
     分页代码
     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>&nbsp;&nbsp;
     <%
        if(curpage==1){
    %>
    上一页
    <%
     }else{
    %>
     <a href="page.jsp?curpage=<%=curpage-1%>">上一页</a>&nbsp;&nbsp;
     <%
     }
     %>
     
     
     <%
      if(curpage==total_page){
     %>
      下一页
     <%
     }else{
     %>
     <a href="page.jsp?curpage=<%=curpage+1%>">下一页</a>&nbsp;&nbsp;
     <%
     }
     %>
     <a href="page.jsp?curpage=<%=total_page%>">最后一页</a>&nbsp;&nbsp;
     </center>
    </body>
    </html>