Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Servlet/JSP/JSF/JavaFX Script  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
reply to postflat modethreaded modego to previous topicgo to next topicgo to back
作者 Re:急需java bean分页程序 [Re:itceolb2004]
henbane





发贴: 42
于 2005-05-30 10:53 user profilesend a private message to userreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我们使用一个beans来实现数据库的记录的分页显示,方法有很多种。本例是以ResultSet类的游标来实现分页的。
本例由:分页显示记录的页面Jsp
分页beans
数据库连接beans组成
本例在Tomcat下测试通过。
关键思想:
假设总记录数为m,每页显示的记录数是n,那么总页数的计算公式是:
总页数=(m%n)==0?(m/n)Sadm/n+1);
如果准备显示第p页的内容,应当把游标移动到第(p-1)*n+1条记录处。
源代码如下:
1、分页beans
pageNumber.java
package bean;
public class PageNumber
{
  int rowCount=1,    //总的记录数
    pageSize=1,    //每页显示的记录数
    showPage=1,    //设置预显示的页码数
    pageCount=1;    //分页之后的总页数
  
  public void setRowCount(int n){
    rowCount=n;
  }
  public int getRowCount(){
    return rowCount;
  }
  public void setPageCount(int r,int p){
    rowCount=r;
    pageSize=p;
            pageCount=(rowCount%pageSize)==0?(rowCount/pageSize)SadrowCount/pageSize+1);
    //计算分页之后的总页数
  }
  public int getPageCount(){
    return pageCount;
  }
  public void setShowPage(int n){
    showPage=n;
  }
  public int getShowPage(){
    return showPage;
  }
  public void setPageSize(int n){
    pageSize=n;
  }
  public int getPageSize(){
    return pageSize;
  }
}

2、数据库连接beans
package bean;
import java.sql.*;
import java.io.*;
public class MyConnection{
  Connection con=null;  //声明一个共享的连接对象
  Statement stat=null;  
  ResultSet rs=null;
  int rowCount=0;    //总的记录数
  public MyConnection(){
    try{
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    }catch(ClassNotFoundException e){
      System.out.printEnvelope;
    }
    try{
     con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;
DatabaseName=student;","sa","");
    }catch(SQLException e){
     System.out.printEnvelope;
    }
  }
  public ResultSet myQuery(String sql) throws SQLException{
    //结果集的游标可上下移动,但当数据库变化时,结果集不变,
//不能用结果集更新数据库中的表
    stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
    //返回可滚动的结果集
    rs=stat.executeQuery(sql);
    return rs;
  }
  public void myClose() throws SQLException{
    con.close();
  }
}
3、分页显示记录的JSP页面

<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="bean.PageNumber"%>
<%@page import="bean.MyConnection"%>
<%@page import="java.io.*"%>
<jsp:useBean id="handlePage" class="bean.PageNumber" scope="session"/>
<jsp:useBean id="myCon" class="bean.MyConnection" scope="application"/>
<HTML>
<BODY bgcolor=cyan><Size=1>
<CENTER>
<BR><BR>
<%!
  // 以表格形式显示数据库记录的方法
   public void showList(ResultSet rs,JspWriter out,int n){
   try{
out.print("<BR><BR><Table border=2><tr><th>学号<th>姓名<th>数学<th>英语<th>物理</tr>");
        for(int i=1;i<=n;i++){
         out.print("<tr>");
          String number=rs.getString(1);
          out.print("<td>"+number+"</td>");
          String name=rs.getString(2);
          out.print("<td>"+name+"</td>");
          int math=rs.getInt(3);
          out.print("<td>"+math+"</td>");
          int english=rs.getInt(4);
          out.print("<td>"+english+"</td>");
          int physics=rs.getInt(5);
          out.print("<td>"+physics+"</td>");
          out.print("</tr>");
          rs.next();
     }
       out.print("</table>");
     }catch(Exception e){
       System.out.printlnEnvelope;
     }
  }
%>
<%
  ResultSet rs=null;
  int rowCount=0;  //总的记录数
  try{
     //返回可滚动的结果集
     rs=myCon.myQuery("select * from students");
    //将游标移动到最后一行
    rs.last();
    //获取记录总数
    rowCount=rs.getRow();
    //设置每页显示的记录数
    handlePage.setPageSize(2);
    //计算总页数
    handlePage.setPageCount(rowCount,handlePage.getPageSize());
    out.print("共有"+handlePage.getPageCount()+"页,");
    out.print("每页显示"+handlePage.getPageSize()+"条记录");
  }catch(SQLException e){
    out.printEnvelope;
  }
%>
<%--选择显示某页的表单--%>
<%String str=response.encodeRedirectURL("showList.jsp");    //获取showList.jsp的url%>
<Form action="<%=str%>" method="post">
显示首页:<Input Type="hidden" name="a" value="first">
<input type=submit value="first">
</form>
<Form action="<%=str%>" method="post">
显示下一页:<Input Type="hidden" name="a" value="next">
<input type=submit value="next">
</form>
<Form action="<%=str%>" method="post">
显示上一页:<Input Type="hidden" name="a" value="previous">
<input type=submit value="previous">
</form>
<Form action="<%=str%>" method="post">
输入要显示的页数:<Input Type="text" name="a" value="1" style="text-align:right">
<input type=submit value="submit">
</form>
<%
String s=request.getParameter("a");
   if(s==null){
     s="1";
   }else if(s.equals("first")){
     handlePage.setShowPage(1);    //设置预显示页
     out.print("目前显示第"+handlePage.getShowPage()+"页");
     //将游标移到指定的位置
     rs.absolute(1);
     //显示该页的内容
     showList(rs,out,handlePage.getPageSize());
   }else if(s.equals("next")){
     int n=handlePage.getShowPage();    //获取目前的页数
     n=(n+1);    //将页数增1
     if(n>handlePage.getPageCount()) n=1;
     handlePage.setShowPageThumbs down;    //设置预显示页
     out.print("目前显示第"+handlePage.getShowPage()+"页");
     //将游标移到指定的位置
     rs.absolute((n-1)*handlePage.getPageSize()+1);
     //显示该页的内容
     showList(rs,out,handlePage.getPageSize());
   }else if(s.equals("previous")){
     int n=handlePage.getShowPage();    //获取目前的页数
     n=n-1;    //将页数减1
     if(n<=0) n=handlePage.getPageCount();
     handlePage.setShowPageThumbs down;    //设置预显示页
     out.print("目前显示第"+handlePage.getShowPage()+"页");
     //将游标移到指定的位置
     rs.absolute((n-1)*handlePage.getPageSize()+1);
     //显示该页的内容
     showList(rs,out,handlePage.getPageSize());
   }else{
     int m=Integer.parseIntMoon;    //把输入的字符转化为整型数
     handlePage.setShowPageMusic;  //设置预显示页
     out.print("目前显示第"+handlePage.getShowPage()+"页");
     int n=handlePage.getShowPage();
     //将游标移到指定的位置
     rs.absolute((n-1)*handlePage.getPageSize()+1);
     //显示该页的内容
     showList(rs,out,handlePage.getPageSize());
   }
%>
</CENTER>
</BODY>
</HTML>
数据库的表结构是:
create table students(
id varchar(10),name varchar(10),math int,english int,physics int)
数据库名是:student
注意:本例连接Sql数据库方式是直连,需要三个Sql的直连包。




话题树型展开
人气 标题 作者 字数 发贴时间
2645 急需java bean分页程序 itceolb2004 44 2005-05-26 16:51
1982 Re:急需java bean分页程序 leowu2000 116 2005-05-27 09:31
2303 Re:急需java bean分页程序 henbane 33 2005-05-28 09:36
2180 Re:急需java bean分页程序 henbane 5705 2005-05-30 10:53
2318 请见下面程序,但有一处我也不明白,请高手解答。见:问题在这里 henbane 5747 2005-05-30 10:56

reply to postflat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923