JSP通用分页组件基于 javabean技术

  • A+
所属分类:程序设计

数据库采用mysql,数据库建库数据库代码没有提供,请自行添加。在数据库中添加user表,3行字段即可。
该代码可作为通用分页组件使用。

第一个文件PagedbClass.java

  1. package com.kanba.tools;   
  2.   
  3. import java.sql.*;   
  4.   
  5. import com.kanba.connection.Conn;   
  6.   
  7. public class PagedbClass {   
  8.   
  9. Connection con = null;   
  10. Statement stmt = null;   
  11. ResultSet rs = null;   
  12. ResultSetMetaData resultsMeta =null;   
  13. int rows = 0;   
  14. public PagedbClass() {   
  15.     con = new Conn().getConnection();   
  16. }   
  17. public ResultSet executeQuery(String sql) throws SQLException{   
  18.    ResultSet rs = null;   
  19.    try{   
  20.     stmt = con.createStatement();   
  21.     rs = stmt.executeQuery(sql);   
  22.     while(rs.next())   
  23.      this.rows ++;   
  24.     rs = stmt.executeQuery(sql);   
  25.    }   
  26.    catch (SQLException e){   
  27.     System.out.print("Query:"+e.getMessage());   
  28.    }   
  29.   
  30.    this.rs = rs;   
  31.    return rs;   
  32. }   
  33. public boolean executeUpdate(String sql){   
  34.    try{   
  35.     stmt = con.createStatement();   
  36.     stmt.executeUpdate(sql);   
  37.     return true;   
  38.    }   
  39.    catch(SQLException e){   
  40.     System.out.print("Update:"+e.getMessage());   
  41.     return false;   
  42.    }   
  43. }   
  44. public int getColumns(){   
  45.    int columns = 0;   
  46.    try{   
  47.     this.resultsMeta = this.rs.getMetaData();   
  48.     columns = this.resultsMeta.getColumnCount();   
  49.    }   
  50.    catch (SQLException e) {}   
  51.    return columns;   
  52. }   
  53. public int getRows(){   
  54.    return this.rows;   
  55. }   
  56. public void closedb(){   
  57.    try{   
  58.     con.close();   
  59.    }catch(SQLException e){   
  60.     e.printStackTrace();   
  61.    }   
  62.      
  63. }   
  64.   
  65.   
  66. }  

第二个文件分页通用类 PageQuery.java

  1. package com.kanba.tools;   
  2.   
  3. import java.sql.*;   
  4. import javax.servlet.http.*;   
  5.   
  6. public class PageQuery {   
  7.   
  8. int Offset; // 记录偏移量   
  9. int Total; // 记录总数   
  10.   
  11. int MaxLine; // 记录每页显示记录数   
  12. ResultSet rs; // 读出的结果   
  13.   
  14. int TPages; // 总页数   
  15. int CPages; // 当前页数   
  16.   
  17. String PageQuery; // 分页显示要传递的参数   
  18. String Query; // query 语句   
  19. String QueryPart; // " FROM " 以后的 query 部分   
  20.   
  21. String FilePath;   
  22.   
  23. PagedbClass db; // object of dbclass   
  24.   
  25. //constructer do nothing   
  26. public PageQuery() {   
  27. // 每页显示十行   
  28.    MaxLine = 30;   
  29.    db = new PagedbClass();   
  30. }   
  31.   
  32. //********读取记录***************   
  33. // 主要工作函数,根据所给的条件从表中读取相应的记录   
  34.   
  35. public ResultSet myQuery(String query, HttpServletRequest req) throws SQLException {   
  36.   
  37.    String query_part, os;   
  38.    int begin, offset;   
  39.   
  40.    // 截取 " FROM " 以后的 query 语句   
  41.    begin = query.indexOf(" FROM ");   
  42.    query_part = query.substring(begin, query.length()).trim();   
  43.   
  44. // 计算偏移量   
  45.    os = req.getParameter("offset");   
  46.    if (os == null) Offset = 0;   
  47.    else Offset = Integer.parseInt(os);   
  48.   
  49. // 获取文件名   
  50.    FilePath = req.getRequestURI();   
  51.   
  52.    Query = query;   
  53.    QueryPart = query_part;   
  54.   
  55. // 计算总的记录条数   
  56.    String SQL = "SELECT Count(*) AS total " + this.QueryPart;   
  57.    rs = db.executeQuery(SQL);   
  58.    if (rs.next())   
  59.     Total = rs.getInt(1);   
  60.   
  61. // 设置当前页数和总页数   
  62.    TPages = (int)Math.ceil((double)this.Total/this.MaxLine);   
  63.    CPages = (int)Math.floor((double)Offset/this.MaxLine+1);   
  64.   
  65. // 根据条件判断,取出所需记录   
  66.    if (Total > 0) {   
  67.     SQL = Query + " LIMIT " + Offset + " , " + MaxLine;   
  68.     rs = db.executeQuery(SQL);   
  69.    }   
  70.      
  71.    return rs;   
  72. }   
  73. public void close(){   
  74.    db.closedb();   
  75. }   
  76.   
  77. // 显示总页数   
  78. public int getTotalPages() {   
  79.    return TPages;   
  80. }   
  81.   
  82. //显示当前所在页数   
  83. public int getCurrenPages() {   
  84.    return CPages;   
  85. }   
  86.   
  87. //**********显示翻页提示栏*************   
  88. // 显示首页、下页、上页、尾页   
  89. public String PageLegend() {   
  90.   
  91.    String str = "";   
  92.    int first, next, prev, last;   
  93.    first = 0;   
  94.    next = Offset + MaxLine;   
  95.    prev = Offset - MaxLine;   
  96.    last = (this.TPages - 1) * MaxLine;   
  97.   
  98.    if(Offset >= MaxLine)   
  99.     str += " <A href=" + FilePath + "?offset=" + first + ">首页</A> ";   
  100.    else str += " 首页 ";   
  101.    if(prev >= 0)   
  102.     str += " <A href=" + FilePath + "?offset=" + prev + ">前页</A> ";   
  103.    else str += " 前页 ";   
  104.    if(next < Total)   
  105.     str += " <A href=" + FilePath + "?offset=" + next + ">后页</A> ";   
  106.    else str += " 后页 ";   
  107.    if(TPages != 0 && CPages < TPages)   
  108.     str += " <A href=" + FilePath + "?offset=" + last + ">尾页</A>";   
  109.    else str += " 尾页 ";   
  110.   
  111.    str += " 页次:" + getCurrenPages() + "/" + getTotalPages() + "页 ";   
  112.    str += MaxLine + "条/页 " + "共" + Total + "条";   
  113.    String pageNum;   
  114.    return str;   
  115. }   
  116. }  

数据库连接文件 Conn.java

  1. package com.kanba.connection   
  2.   
  3. import java.sql.*;   
  4.   
  5. public class Conn {   
  6. public Conn(){}   
  7. //这个是连接数据库的代码,也可以通过连接池等技术实现。   
  8. String driverClass="org.gjt.mm.mysql.Driver";   
  9. String url = "jdbc:mysql://localhost/test?user=root&password=0&useUnicode=true&characterEncoding=gb2312";   
  10. String username="root";   
  11. String password="pwd";   
  12. Connection conn=null;       //初始化   
  13.   
  14. public Connection getConnection()   
  15. {   
  16.    try {   
  17.     Class.forName(driverClass); //加载驱动   
  18.    // System.out.println("jiazaichenggong");   
  19.    } catch (ClassNotFoundException e) {   
  20.     e.printStackTrace();   
  21.    }   
  22.    try {   
  23.     conn=DriverManager.getConnection(url); //建立连接conn       
  24.       
  25.    } catch (SQLException e) {   
  26.   
  27.     e.printStackTrace();   
  28.    }   
  29.    return conn;   
  30. }   
  31. }  

分页测试文件 page.jsp

  1. <%@ page language="java" import="java.sql.*, com.kanba.tools.*" %>   
  2. <%@ page contentType="text/html; charset=gb2312" %>   
  3. <jsp:useBean id="pq" scope="page" class="com.kanba.tools.PageQuery" />   
  4. <html>   
  5.   
  6. <body bgcolor="#8BA9C9">   
  7. <table bgcolor="#fecda9" cellspacing=0>   
  8. <%   
  9.   
  10. String query = "SELECT * FROM users";   // 注意这个" FROM "一定要大写,程序中需要靠这个FROM后的query语句判断总行数。          
  11. ResultSet rs = pq.myQuery(query, request);   
  12. String bar = pq.PageLegend(); //读取分页提示栏   
  13.   
  14. out.println("<tr><td colspan=2>"+bar+"</td></tr>");   
  15. out.println("<tr><td colspan=2><hr size=1 color=blue></td></tr>");   
  16. while (rs.next()) {   
  17. //说明:rs.getString(2)等是列名相对应的位置,不要用rs.getString("colmn_name")这种形式   
  18. %>   
  19. <tr><td><%=rs.getString(1)%></td><td><%=rs.getString(2)%></td></tr>   
  20. <% }   
  21. rs.close;pq.close();   
  22. %>   
  23. </table>   
  24. </body>   
  25. </html>  
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  2   博主  0

    • avatar 苗苗 1

      博主很强大啊,呵呵,学到了

        • avatar 茗记 5

          @苗苗 谢谢你的支持,欢迎你下次光临本博