henbane
![](images/star2.gif) ![](images/star1.gif) ![](images/star1.gif) ![](images/star1.gif)
发贴: 42
|
于 2005-05-30 10:53
![user profile](images_zh_CN/icons/icon_profile.gif) ![send a private message to user](images_zh_CN/icons/icon_pm.gif) ![reply to post](images_zh_CN/icons/icon_quote.gif) ![search all posts by](images_zh_CN/icons/icon_find.gif) ![select and copy to clipboard.
ie only, sorry for netscape users:-)](images_zh_CN/icons/icon_copy.gif)
我们使用一个beans来实现数据库的记录的分页显示,方法有很多种。本例是以ResultSet类的游标来实现分页的。 本例由:分页显示记录的页面Jsp 分页beans 数据库连接beans组成 本例在Tomcat下测试通过。 关键思想: 假设总记录数为m,每页显示的记录数是n,那么总页数的计算公式是: 总页数=(m%n)==0?(m/n) m/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) rowCount/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.print ; } try{ con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=student;","sa",""); }catch(SQLException e){ System.out.print ; } } 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.println ; } } %> <% 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.print ; } %> <%--选择显示某页的表单--%> <%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.setShowPage ; //设置预显示页 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.setShowPage ; //设置预显示页 out.print("目前显示第"+handlePage.getShowPage()+"页"); //将游标移到指定的位置 rs.absolute((n-1)*handlePage.getPageSize()+1); //显示该页的内容 showList(rs,out,handlePage.getPageSize()); }else{ int m=Integer.parseInt ; //把输入的字符转化为整型数 handlePage.setShowPage ; //设置预显示页 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的直连包。
|