e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> JSP教程 >> 利用Struts结合Jbuilder7、MySql建立Web站点(2)--分页显示 >> 教程正文
 
教程搜索
 
 
相关教程
  • JSP分页技术实现
  • 使用XML封装数据库操作语句的实现(完
  • 结合”XML封装数据库操作语句的实现”
  • 如何使用XML实现多渠道接入网站的构架
  • 深入浅出taglib
  • 在JSP中编写你的第一个Tag
  • 用Java实现Web服务器
  • 如何利用xml,javascript绕开apple
  • 缓存JSP显示的内容
  • 关于JAVA的分页查询操作技术
  • 漫步j2ee之jsp技术(1)
  • 漫步j2ee之jsp技术(2)
  • Portlet应用开发(Portlet Specs v1.0)
  • 如何用jsp输出存在于oracle数据库Blob
  • Servlet设计
  • 用servlet显示图片
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
利用Struts结合Jbuilder7、MySql建立Web站点(2)--分页显示
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9
利用Struts结合Jbuilder7、MySql建立Web站点(2)--分页显示


作者:Sailing(蓝色虾)

iamcyh@263.net

本程序全部源代码:vod.zip

介绍:

本篇接着第一篇的内容,继续进行VOD网站的制作(第一篇《利用Struts结合Jbuilder7、MySql建立Web站点(1)--连接数据库》),

当需要将数据库中的大量内容供用户浏览的时候,我们一般采用两种方法,第一种很简单,一次性将数据库中的内容读出,接着全部

显示在网页上,这种方法在数据量较小的时候一般采用;还有一种方法就是分页显示,也是现在各大网站普遍采用的方式,关于分页

的方法多种多样,我这里采用的是普遍使用的采取移动数据库指针的方法。

建立PageInfo Bean 这个Bean的任务就是储存关于分页需要的所有信息,包括总共含有的页数,含有的纪录总数,当前的页数,上一页的页数,下一页的页数,将这五条信息包含在同一个bean中将会给以后在jsp页面中的编程带来很大的方便,因为目前有许多网站将目前的页数,上一页的页数和下一页的页数不放在bean中,而是在jsp页面通过当前的页数分别加上1和减去1得到,虽然这样很方便,但是这样做将会在Jsp页面中产生逻辑的运算,破坏了MVC的规则,以上将5个变量放入一个bean的编程方法只是我的个人习惯,如果大家觉得有不妥的地方请多多指教。 PageInfo的代码如下: package vod.model; import java.util.Vector; public class PageInfo {private int totalPage;//总共有多少页private int resultCount;//总共有多少条纪录private int page;//目前的页数private int previousPage;//上一页private int nextpage;//下一页 public void setTotalPage(int totalPage){this.totalPage=totalPage;}public int getTotalPage(){return totalPage;}//-------------------------------------------public void setResultCount(int count){this.resultCount=count;}public int getResultCount(){return resultCount;}//-------------------------------------------public void setPage(int page){this.page=page;}public int getpage(){return page;}//-------------------------------------------public void setPreviousPage(int page){this.previousPage=page;}public int getPreviousPage(){return (this.page-1);}//-------------------------------------------public void setNextPage(int page){this.nextpage=page;}public int getNextPage(){return (this.page+1);} //-------------------------------------------/*** 根据传来的数组生成一个PageInfo对象* 我们约定数组中的index为0的为总页数* index为1的纪录总数* @param info* @return*/public static PageInfo load(int[] info){PageInfo pageinfo =new PageInfo();int intValue=0; intValue=info[0];if(intValue > 0)pageinfo.setTotalPage(intValue); intValue=info[1];if(intValue > 0)pageinfo.setResultCount(intValue); return pageinfo;}} 注意这里的load()方法中的int数组,我们约定数组中的第一个元素为总页数,第二个元素为纪录总数。这里的getPreviousPage()方法没有直接返回previousPage,而是根据page的值减去1得到previousPage是为了以后调用的方便。 数据库的分页

我们在进行分页的读取之前我们首先要做的事情就是确定所要操作的数据库中的内容按照我们需要的每页显示多少数据量可以分为几页,总共有多少数据。下面我们来看看这个分页代码(EvaluateDateBase.java)的实现: package vod.model; import java.sql.Connection;import org.gjt.mm.mysql.jdbc2.ResultSet;import java.sql.PreparedStatement;import java.sql.Statement;import java.sql.SQLException; public class EvaluateDateBase {/***根据方法中的数据表的名称,连接,每页出现的纪录数方法返回一个PageInfo的实例*/public static PageInfo getPageInfo(String datebase,Connection conn,int pageSize) throws SQLException{int totalPage=0;int resultCount=0;int[] info=new int[2];String sql="";if(conn==null)throw new SQLException("No Conn in EvaluateDateBase"); ResultSet rsCount=null; PreparedStatement psmt=null; sql="select count(*) from "+datebase;//根据数据库的名字得到相对应的SQL语句 try{psmt=conn.prepareStatement(sql);rsCount=(ResultSet)psmt.executeQuery();rsCount.next();resultCount=rsCount.getInt(1);rsCount.close();}catch(SQLException e){e.printStackTrace();} totalPage = (resultCount+pageSize-1) / pageSize;//统计总页数//还记得我们的约定吗?// index为0的为总页数,index为1的为纪录总数info[0]=totalPage;info[1]=resultCount;PageInfo pageinfo=PageInfo.load(info);return pageinfo;}}这里我们使用了sql="select count(*) from "+datebase; 来得到对应的SQL语句,根据这个SQL语句得到的结果集通过getInt(1)将得到这个结果集含有多少条纪录。并且(resultCount+pageSize-1) / pageSize得到按照需要的每页显示的纪录数得到的总页数,可能初学者会疑惑为什么不直接用结果总数除以每页需要的结果数得到总页数呢,这样是因为如果含有的记录数不能被整除的话,那么统计得到的总页数将会少一页,按照上面的方法计算将会得到正确的数值,有兴趣的话大家可以算算,当然也可以通过另外一种方法实现就是如果不能整除就加上1的方法实现。最后将得到的总页数和总纪录数放入一个PageInfo实例中以便以后调用。 取得所有关于足球的影片,并按照需要的范围取得合适的LinkedList 要取得分页所需要的数据库中的内容所需要的代码将在这儿出现,我们的分页原理很简单,举个例子:目前我们设定每一页只显示10条纪录,那么假如用户要取得第2页的内容,那么就是第11-20条纪录,我们就先将数据库的游标移到第10条记录上,然后通过while和next()结合的方法取得第11-20 条的数据。然后读取每一条纪录,通过Football的load()将纪录中的数据库的字段与Football Bean中的值匹配并将其放入一个LinkedList中。代码如下(MoreFootball.java): package vod.model; import java.sql.Connection;import org.gjt.mm.mysql.jdbc2.ResultSet;import java.sql.PreparedStatement;import java.sql.Statement;import java.sql.SQLException;import java.util.LinkedList; public class MoreFootball {Connection conn;public void setConn(Connection conn){this.conn=conn;} public LinkedList getFootballList(int page,int pageSize) throws SQLException{LinkedList footballList;if(conn==null)throw new SQLException("No Connection in MoreFootball");PreparedStatement pstmt = null;ResultSet rs = null;footballList=new LinkedList(); try{pstmt = conn.prepareStatement("select * from football order by date desc");rs = (ResultSet)pstmt.executeQuery();//根据目前需要显示的页数和每一页要求显示的纪录条数移动数据库的指针int i = (page-1) * pageSize;//由于不能定位到0这个位置if(i!=0)rs.absolute(i);//如果i为10,那么数据库的指针将会移动到第十条数据上/*for(

1 2 3 4 5 6 下一页
  • 上一篇教程: 运用你的Strut(1)
  • 下一篇教程: JSP白皮书
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.