山寨-IT民工 Eric's Blog 蓝色的海洋、自由的天空
山寨
导航
首页
JAVA技术
框架应用
疑难杂症
数据库应用
软件工程
工具应用
开源包
JavaScript
Linux
站内标签
留言
« 一个Jsp初学者的学习过程(四)
一个Jsp初学者的学习过程(六) »
2006-6-23 13:23:31
一个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() //根据maxRowC ount和onePageRowCount计算出maxPageCount并返回 public int getMaxPageCount() { if (maxRowCount%onePageRowCount==0) maxPageCount=maxRowCount/onePageRowCount; else maxPageCount=maxRowCount/onePageRowCount+1; return maxPageCount; } } --------------------------------------------------------------------------------- ----------------------------CountBean.java------------------------------------ //该bean用于接收具体页数然后返回该页应显示的记录 package ringz.javabeans; import java.util.*; import java.io.*; import java.sql.*; public class CountBean { private int pageNum;//当前是第几页 private String classforname; private String servanddb; private String sql; Vector v=new Vector(); //得到关于目标数据库的搜索条件 public void setSql(String s1,String s2,String sqlstr) { this.classforname=s1; this.servanddb=s2; this.sql=sqlstr; } //得到pageNum public void setPageNum(int pagenum) { this.pageNum=pagenum; } //返回结果 public Vector getResult(String listname[])throws Exception { int num=listname.length;//得到数组的长度 String listName[]=new String[num];//定义一个大小为num的string型数组 for(int i=0;ilistName[i]=listname[i];//将目标数组的内容传给listName数组 try { Class.forName(classforname); Connection con=DriverManager.getConnection(servanddb); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(sql); int i=1; while(rs.next()) { Object[] obj=new Object[num]; for(int j=0;jobj[j]=rs.getString(listName[j]); v.add(obj); i++; }//while rs.close(); stmt.close(); con.close(); return v; }//try catch(Exception e) { e.printStackTrace(); throw e; }//catch } } ---------------------------------------------------------------------------------- 编译上面这两个文件的时候,发现如果不把“错误”扔掉(throw e),就无法编译成功,我不明白具体原因。 -----------------------------------page.jsp---------- ----------------------------- 标题 作者 日期 <% java.util.Vector v=page2.getResult(listname); java.util.Enumeration e=v.elements(); while(e.hasMoreElements()) { Object[] obj=(Object[])e.nextElement();//************** **注意修改下面的几行 String id=obj[0].toString(); String name=obj[1].toString(); String time=obj[2].toString(); String title=obj[3].toString(); out.println(""); out.println(" "+title+" "); out.println(" "+name+" "); out.println(" "+time+" "); out.println(""); } %> 跳转到第 页 ---------------------------------------------------------------------------------- 整个的分页功能写完后,我发现还是有很大的不足:显示分页的页面(page.jsp)代码太多,其他页面引用该功能的时候还是要从这里复制大段的代码,而且其中需要根据实际情况改动的地方多达七处(标注很多*的地方),这很容易出错,不利于管理使用,但是至今我仍找不到一个合适的方法解决这个问题——希望高手们扔玉。
Tags:
发布:Eric | 分类:JAVA技术 | 评论:0 | 引用:0 | 浏览:
点击这里获取该日志的TrackBack引用地址
相关文章:
发表评论:
名称(*)
邮箱
网站链接
正文(*)(留言最长字数:1000)
记住我,下次回复时不用重新输入个人信息
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
日历
最新评论及回复
最近发表
Powered By
Z-Blog 1.8 Arwen Build 81206
湘 ICP 备 06003756 号
Copyright
山寨
Rights Reserved.