JSP初级教程--JSP初学者入门之五

网络整理 - 07-27

  第五章 jsp分页功能的实现

  经过上面的学习我渐渐熟悉了对数据库的操作,留言板的功能也不断的完善,随着留言的增加信息的目录越来越长了,现在需要实现一个分页功能了,我尝试自己解决这个问题。

  1、我应该把它的关键部分封装成一个bean,使它尽可能的能够重用;

  2、通过资料了解有两种数据库查询方案:一、一次取得所有资料,然后在指定的页显示指定的资料;二、分次查询数据库,每次只获得本页的数据。考虑到数据库中记录数越多,方案一所占的服务器资源就越多(将所有的记录都放到内存中,假如有50万条记录的话……@$^*%@#),所以应该采用方案二;

  3、首先要知道目标数据库里共有多少条记录(select count(*) from 表名),然后确定每页显示多少条记录,再根据它计算一共分多少页(最大页数)显示,这部分由bean1(在我的代码里就随便起个名叫PageBean)实现;获取当前要显示第几页的请求,查询本页要显示哪些条记录,将每条记录的内容作为一组数据返回给显示页面,这部分由bean2(CountBean)实现;显示页面(.jsp文件)显示各条记录的内容。

  到这里我发现有两个难点:(1)查询从第m条到第n条记录的SQL语句不会写,通过在网上查找资料,这个问题得到解决;(2)bean2返回给显示页面的值是个二维的数组,这个数组怎么传呢?于是不得不上网翻书查找资料,最终发现由Vector(向量)来解决,由于没有工具书,无法针对Vector进一步学习,就只好分析代码,好在最后分析明白了——到目前为止,也只是明白了那段代码,仍然无法做到能够应用。

  下面是这三个文件的代码:

  -----------------------------------------PageBean.java-----------------------------------------------

  //该bean用于实现分页功能时得到总的记录数和最大的页数

  package ringz.javabeans;

  import java.io.*;

  import java.sql.*;

  public class PageBean

  {

  private int maxRowCount;//最大记录数

  private int onePageRowCount;//每页显示的记录数

  private int maxPageCount;//最大页数

  private String classforname;

  private String servanddb;

  private String sql;

  //

  //得到关于目标数据库的搜索条件

  public void setSql(String s1,String s2,String sql)

  {

  this.classforname=s1;

  this.servanddb=s2;

  this.sql=sql;

  }

  //得到onePageRowCount

  public void setOnePageRowCount(int counts)

  {

  onePageRowCount=counts;

  }

  //计算maxRowCount并返回

  public int getMaxRowCount()throws Exception

  {

  try

  {

  Class.forName(classforname);//载入驱动程式类别

  Connection con=DriverManager.getConnection(servanddb);//建立数据库连接

  Statement stmt=con.createStatement();//建立Statement变量

  ResultSet rs=stmt.executeQuery(sql);

  if (rs.next())

  maxRowCount=rs.getInt(1);

  rs.close();

  stmt.close();

  con.close();

  return maxRowCount;

  }//try

  catch (Exception e)

  {

  e.printStackTrace();

  throw e;

  }

  }//getMaxRowCount()