1. 这篇文章介绍的是用javabeanjsp页面来实现数据的分页显示,例子中所使用的数据库是Mysql,需要的朋友可以了解下
  1. 这篇文章介绍的是用javabeanjsp页面来实现数据的分页显示,例子中所使用的数据库是Mysql
  2. 1、先看javabean
  3. 类名:
  4. databaseBean.java:
  5. 以下为databaseBean.java的代码:
  1. package database_basic;
  2. import java.sql.*;
  3. import java.util.*;
  4. public class databaseBean
  5. {
  6. //这是默认的数据库连接方式
  7. private String DBLocation="jdbc:mysql://localhost/onestoptech?user=root&password=password&useUnicode=true&characterEncoding=GB2312";
  8. private String DBDriver="org.gjt.mm.mysql.Driver";
  9. private Connection conn=null;
  10. public databaseBean(){}
  11. //通过set方法可以灵活设置数据库的连接
  12. public void setDBLocation(String location){DBLocation=location;}
  13. public void setDBDriver(String driver){DBDriver=driver;}
  14. public void setconn(Connection conn){this.conn=conn;}
  15. public String getDBLocation(){return(DBLocation);}
  16. public String getDBDriver(){return(DBDriver);}
  17. public Connection getconn(){return(conn);}
  18. /*public String DBConnect(){}
  19. public String DBDisconnect(){}
  20. public ResultSet query(String sql){}
  21. public int getTotalPage(String sql,int pageSize){}
  22. public ResultSet getPagedRs(String sql,int pageSize,int pageNumber){}
  23. public String execute_sql(String sql){}*/
  24. //建立连接
  25. public String DBConnect()
  26. {
  27. String strExc="Success!";//strExc默认为Success,如果有例外抛出,即数据库连接不成功,则下面几个catch中被赋予其他抛出信息
  28. try
  29. {
  30. Class.forName(DBDriver);
  31. conn=DriverManager.getConnection(DBLocation);
  32. }
  33. catch(ClassNotFoundException e)
  34. {
  35. strExc="数据库驱动没有找到,错误提示:<br>" +e.toString();
  36. }
  37. catch(SQLException e)
  38. {
  39. strExc="sql语句错误,错误提示<br>" +e.toString();
  40. }
  41. catch(Exception e)
  42. {
  43. strExc="错误提示:<br>" +e.toString();
  44. }
  45. return (strExc);
  46. }//then end of DBConnect
  47. //断开连接
  48. public String DBDisconnect()
  49. {
  50. String strExc="Success!";//strExc默认为Success,如果有例外抛出,即数据库断开连接不成功,则下面几个catch中被赋予其他抛出信息
  51. try
  52. {
  53. if(conn!=null)conn.close();
  54. }
  55. catch(SQLException e)
  56. {
  57. strExc=e.toString();
  58. }
  59. return (strExc);
  60. }
  61. //通过传入sql语句来返回一个结果集
  62. public ResultSet query(String sql) throws SQLException,Exception
  63. {
  64. ResultSet rs=null;
  65. if (conn==null)
  66. {
  67. DBConnect();
  68. }
  69. if (conn==null)
  70. {
  71. rs=null;
  72. }
  73. else
  74. {
  75. try
  76. {
  77. Statement s=conn.createStatement();
  78. rs=s.executeQuery(sql);
  79. }
  80. catch(SQLException e){throw new SQLException("Cound not execute query.");}
  81. catch(Exception e){throw new Exception("Cound not execute query.");}
  82. }//then end of if
  83. return(rs);
  84. }//then end of the function executeQuery
  85. //通过传入sql语句和pageSize(每页所显示的结果数目)计算并返回总共的页数
  86. public int getTotalPage(String sql,int pageSize)
  87. {
  88. ResultSet rs=null;
  89. int totalRows=0;
  90. if (conn==null)
  91. {
  92. DBConnect();
  93. }
  94. if (conn==null)
  95. {
  96. rs=null;
  97. }
  98. else
  99. try
  100. {
  101. Statement s=conn.createStatement();
  102. rs=s.executeQuery(sql);//通过传入的sql得到结果集
  103. while(rs.next())
  104. totalRows++;//让rs一个个数,数完一遍,通过totalRows++也就计算出了返回结果集中总的条目数
  105. }
  106. catch(SQLException e){}
  107. rs=null;
  108. //由这个算法得出总页数(totalRows-1)/pageSize+1,并返回结果。totalRows是指返回结果集中的总的条目数,pageSize是指每页显示的条目数
  109. return((totalRows-1)/pageSize+1);
  110. }
  111. //通过传入sql语句,每页显示的条目数(pageSize)和页码,得到一个结果集
  112. public ResultSet getPagedRs(String sql,int pageSize,int pageNumber)
  113. {
  114. ResultSet rs=null;
  115. int absoluteLocation;
  116. if (conn==null)
  117. {
  118. DBConnect();
  119. }
  120. if (conn==null)
  121. {
  122. rs=null;
  123. }
  124. else
  125. try
  126. {
  127. Statement s=conn.createStatement();
  128. //pageSize*pageNumber每页显示的条目数乘以页码,计算出最后一行结果的编号,任何编号大于这个maxrows的结果都会被drop
  129. s.setMaxRows(pageSize*pageNumber);
  130. rs=s.executeQuery(sql);
  131. }
  132. catch(SQLException e){}
  133. //absoluteLocationpageSize*(pageNumber-1)这个表达式计算出上一页最后一个结果的编号(如果有本页的话,上一页的显示的结果条目数肯定是pageSize
  134. absoluteLocation=pageSize*(pageNumber-1);
  135. try
  136. {
  137. //这个for循环的作用是让结果集rs定位到本页之前的最后一个结果处
  138. for(int i=0;i<absoluteLocation;i++)
  139. {
  140. rs.next();
  141. }
  142. }
  143. catch(SQLException e) { }
  144. //此时返回的结果集被两头一夹,就是该页(pageNumber)要显示的结果
  145. return(rs);
  146. }
  147. public String execute_sql(String sql){
  148. String strExc;
  149. strExc="Success!";
  150. if(conn!=null)
  151. {
  152. try{
  153. PreparedStatement update;
  154. update=conn.prepareStatement(sql);
  155. update.execute();
  156. }
  157. catch(SQLException e)
  158. {
  159. strExc=e.toString();
  160. }
  161. catch(Exception e)
  162. {
  163. strExc=e.toString();
  164. }
  165. }
  166. else
  167. {
  168. strExc="Connection Lost!";
  169. }
  170. return(strExc);
  171. }//execute_sql
  1. 2、分析jsp页面
  2. 页面名称:
  3. admin_show.jsp
  4. 页面代码:
  1. <%@ page errorPage="error.jsp"%>
  2. <%@ page contentType="text/html;charset=gb2312"%>
  3. <%@ page import="java.util.*"%>
  4. <%@ page import="java.sql.*"%>
  5. //导入database_basic包下面的databaseBean类,别名是basicDB
  6. <jsp:useBean id="basicDB" class="database_basic.databaseBean" scope="page"/>
  7. <%
  8. String sql;
  9. ResultSet rs;
  10. int id;
  11. String reply,Exc;
  12. Exc=basicDB.DBConnect();//建立连接,若成功,则返回Success!若失败,则返回相应出错信息
  13. if(!Exc.equals("Success!"))
  14. {
  15. //basicDB.DBDisconnect();
  16. throw new Exception(Exc);
  17. }
  18. int pageSize=10; //定义每页显示的数据条数
  19. int currentPage=1; //当前页(第一次显示的肯定是第一页啦!~),以后的“当前页”由下面出现的页面中的pages参数传入
  20. int allPage=-1;
  21. String pages=request.getParameter("pages");//取得页面中pages参数,此参数代表的页面的就是要显示的“当前页面”
  22. if(pages!=null) currentPage=Integer.valueOf(pages).intValue();//这是一个Integer型转int型的例子,第一次执行这个页面的时候,pages这个参数是null,currentPage1;当再次执行这个页面的时候,参数pages将被赋值,currentPagepagesint
  23. sql="select * from gbook order by id desc";//这样返回的结果集会采用desc降序排列,好处是,显示在前面的是最新的信息
  24. allPage=basicDB.getTotalPage(sql,pageSize);//得到总页码数
  25. rs=basicDB.getPagedRs(sql,pageSize,currentPage);//得到当前页面要显示的结果集
  26. %>
  27. <table border="0" cellspacing="1" cellpadding="3" width="590" bgcolor="#ffffff">
  28. <%
  29. while(rs.next()){
  30. id=rs.getInt("id");//得到数据库(结果集)中id编号
  31. %>
  32. <tr bgcolor="#FF6600" style="color:white">
  33. <td >Name:<%=rs.getString("leaver")%></td>
  34. <td >Time:<%=rs.getString("leave_date")%></td>
  35. <td >Email:<%=rs.getString("email")%></td>
  36. <td ><div style="width:150;overflow:hidden;">Home:<%=rs.getString("homepage")%></div></td>
  37. </tr>
  38. <tr bgcolor="#FFE3B9">
  39. <td colspan=4><FONT COLOR="#FF6600">Content:</FONT><BR><BR><%=rs.getString("content")%> </td>
  40. </tr>
  41. <%}%>
  42. <tr><td height="1"></td></tr>
  43. <tr>
  44. <td colspan=4 align=right bgcolor="#FF6600" style="color:white;">
  45. 现在是第<%=currentPage%>页,
  46. <%if(currentPage>1){%>
  47. <!--如果不在第一页,则显示出“首页”链接-->
  48. <A HREF="admin_show.jsp?pages=<%=(currentPage-1)%>">首页</A>
  49. <%}
  50. for(int i=1;i<=allPage;i++)
  51. {
  52. //显示出1234……到最后一页的链接
  53. out.println("<a href=admin_show.jsp?pages="+i+">"+i+"</a>");
  54. }
  55. %>
  56. <%if(currentPage<allPage){%>
  57. <!--如果不在最后一页,则显示出“末页”链接-->
  58. <A HREF="admin_show.jsp?pages=<%=(currentPage+1)%>">末页</A>
  59. <%}%></td>
  60. </tr>
  61. </table>
  62. }//then end of the class
  1. 3、总结
  2. 这个实现分页显示的程序中,有几个算法和实现方法是比较固定且经典的,对没写过分页程序的人来说,应该有所启发。

更多相关文章

  1. Android学习(2)EditView属性
  2. Android(安卓)ListView动画实现方法
  3. android 常用控件的使用 TextView EditTextView
  4. android之layout_weight体验(实现按比例显示)
  5. Android(安卓)Adapter使用总结
  6. Android之Android软键盘的隐藏显示研究
  7. Android(安卓)通过百度地图SDK 实现地图显示和定位(一)
  8. android surfaceflinger研究----Surface机制
  9. Android设置Settings:预读取设置的选项和更新设置结果【2】

随机推荐

  1. 动画:一个底层运行函数的自白!
  2. 动画:这一次用动画搞懂递归!
  3. python吊打Excel?屁!那是你不会用!
  4. 如何用十年掌握编程?
  5. Python时间使用指南.pdf
  6. 动画:面试必刷之二维数组中查找一个元素
  7. 为什么急功近利者往往赚不到钱?
  8. 入土系列 | 前端入门实战项目(八)
  9. 入土系列 | 前端入门项目实战 (一)
  10. 吊打面试官系列 | ES6 面试必问知识点(下)