大龙的博客

常用链接

统计

最新评论

jsp+oracle实现简单的分页

oracle脚本:drop table t_student cascade constraints;
Java代码  收藏代码
  1. /*==============================================================*/  
  2. /* Table: t_student                                           */  
  3. /*==============================================================*/  
  4. create table t_student  (  
  5.    s_id              char(10)                        not null,  
  6.    s_name             varchar2(20)                    not null,  
  7.    s_age              char(2)                         not null,  
  8.    s_sex              char(2)                         not null,  
  9.    s_class            varchar2(20),  
  10.    constraint PK_T_STUDENT primary key (s_id)  
  11. );  
  12.   
  13. insert into t_student values('0001','张三','20','男','08级二班') ;  
  14. insert into t_student values('0002','李四','21','女','08级二班') ;  
  15. insert into t_student values('0003','王五','20','男','08级二班') ;  
  16. insert into t_student values('0004','赵柳','20','女','08级一班') ;  
  17. insert into t_student values('0005','杨梅','21','男','08级二班') ;  
  18. insert into t_student values('0006','刘海','23','女','08级一班') ;  
  19. insert into t_student values('0007','孙江','20','女','08级一班') ;  
  20. insert into t_student values('0008','苏灿','22','男','08级二班') ;  
  21. insert into t_student values('0009','王霞','23','女','08级一班') ;  
  22. insert into t_student values('0010','王猛','22','男','08级二班') ;  
  23. insert into t_student values('0011','张相','22','女','08级一班') ;  
  24. insert into t_student values('0012','香橙','20','女','08级一班') ;  
  25. insert into t_student values('0013','李心','21','女','08级二班') ;  
  26. insert into t_student values('0014','张强','20','男','08级一班') ;  
  27. insert into t_student values('0015','赵琳','21','女','08级一班') ;  
  28. insert into t_student values('0016','刘达','21','男','08级二班') ;  
  29. insert into t_student values('0017','苏惠','20','女','08级二班') ;  
  30. insert into t_student values('0018','贾瑞','20','女','08级一班') ;  
  31. insert into t_student values('0019','谷瑞坤','22','男','08级二班') ;  
  32. insert into t_student values('0020','祥还','21','男','08级一班') ;  
  33. commit;  

  采用单利模式创建DbUtil类获得Connection对象:package com.stmcc.test.util;

Java代码  收藏代码
  1. import java.sql.*;  
  2.   
  3. public class DbUtil {  
  4.   
  5.     private static final String driver = "oracle.jdbc.driver.OracleDriver" ;  
  6.     private static final String url = "jdbc:oracle:thin:@10.10.10.2:1521:orcl" ;  
  7.     private static final String username = "test" ;  
  8.     private static final String password = "test" ;  
  9.     public static Connection getConnection(){  
  10.         Connection conn = null ;  
  11.         try{  
  12.             Class.forName(driver) ;  
  13.             conn = DriverManager.getConnection(url, username, password) ;  
  14.         }catch(Exception e){  
  15.             e.printStackTrace() ;  
  16.         }  
  17.         return conn ;  
  18.     }  
  19.   
  20.     public static void close(Connection conn) {  
  21.         if (conn != null) {  
  22.             try {  
  23.                 conn.close();  
  24.             } catch (SQLException e) {  
  25.                 e.printStackTrace();  
  26.             }  
  27.         }  
  28.     }  
  29.       
  30.     public static void close(PreparedStatement pstmt) {  
  31.         if (pstmt != null) {  
  32.             try {  
  33.                 pstmt.close();  
  34.             } catch (SQLException e) {  
  35.                 e.printStackTrace();  
  36.             }  
  37.         }  
  38.     }  
  39.       
  40.     public static void close(ResultSet rs ) {  
  41.         if (rs != null) {  
  42.             try {  
  43.                 rs.close();  
  44.             } catch (SQLException e) {  
  45.                 e.printStackTrace();  
  46.             }  
  47.         }  
  48.     }  
  49.     public static void main(String[] args) {  
  50.         System.out.println(DbUtil.getConnection());  
  51.     }  
  52. }  

 创建学生实体类:package com.stmcc.test;

Java代码  收藏代码
  1. public class Student {  
  2.   
  3.     private String s_id ;  
  4.     private String s_name ;  
  5.     private String s_age ;  
  6.     private String s_sex ;  
  7.     private String s_class ;  
  8.     public String getS_id() {  
  9.         return s_id;  
  10.     }  
  11.     public void setS_id(String s_id) {  
  12.         this.s_id = s_id;  
  13.     }  
  14.     public String getS_name() {  
  15.         return s_name;  
  16.     }  
  17.     public void setS_name(String s_name) {  
  18.         this.s_name = s_name;  
  19.     }  
  20.     public String getS_age() {  
  21.         return s_age;  
  22.     }  
  23.     public void setS_age(String s_age) {  
  24.         this.s_age = s_age;  
  25.     }  
  26.     public String getS_sex() {  
  27.         return s_sex;  
  28.     }  
  29.     public void setS_sex(String s_sex) {  
  30.         this.s_sex = s_sex;  
  31.     }  
  32.     public String getS_class() {  
  33.         return s_class;  
  34.     }  
  35.     public void setS_class(String s_class) {  
  36.         this.s_class = s_class;  
  37.     }  
  38. }  

  创建学生管理类:package com.stmcc.test.util;

Java代码  收藏代码
  1. import com.stmcc.test.*;  
  2. import java.sql.* ;  
  3. import java.util.*;   
  4. public class StuManager {  
  5.   
  6.     private static StuManager instance = new StuManager() ;  
  7.       
  8.     private StuManager(){} ;  
  9.       
  10.     public static StuManager getInstance(){  
  11.         return instance ;  
  12.     }  
  13. //  oracle实现分页的查询语句  
  14. //  select s_id, s_name, s_age, s_sex, s_class  
  15. //  from  
  16. //  (  
  17. //    select rownum rn, s_id, s_name, s_age, s_sex, s_class  
  18. //    from  
  19. //      (select s_id, s_name, s_age, s_sex, s_class   
  20. //       from t_student order by s_id  
  21. //      )where rownum <= 10  
  22. //  )where rn > 5 ;  
  23.     public PageModel findStudentList(int pageNo, int pageSize){  
  24.         PageModel pageModel = null ;  
  25.         StringBuffer sql = new StringBuffer() ;  
  26.         sql.append("select s_id, s_name, s_age, s_sex, s_class ")  
  27.             .append("from")  
  28.             .append("(")  
  29.             .append("select rownum rn, s_id, s_name, s_age, s_sex, s_class ")  
  30.             .append("from")  
  31.             .append("(")  
  32.             .append("select s_id, s_name, s_age, s_sex, s_class ")  
  33.             .append("from t_student order by s_id")  
  34.             .append(")")  
  35.             .append("where rownum <= ?")  
  36.             .append(")")  
  37.             .append("where rn > ? ");  
  38.         Connection conn = null ;  
  39.         PreparedStatement pstmt = null ;  
  40.         ResultSet rs = null ;  
  41.         try{  
  42.             conn = DbUtil.getConnection() ;  
  43.             pstmt = conn.prepareStatement(sql.toString()) ;  
  44.             pstmt.setInt(1, pageNo*pageSize) ;  
  45.             pstmt.setInt(2, (pageNo - 1)*pageSize) ;  
  46.             rs = pstmt.executeQuery() ;  
  47.             List<Student> stuList = new ArrayList<Student>() ;  
  48.             while (rs.next()){  
  49.                 Student stu = new Student() ;  
  50.                 stu.setS_id(rs.getString("s_id")) ;  
  51.                 stu.setS_name(rs.getString("s_name")) ;  
  52.                 stu.setS_age(rs.getString("s_age")) ;  
  53.                 stu.setS_sex(rs.getString("s_sex")) ;  
  54.                 stu.setS_class(rs.getString("s_class")) ;  
  55.                 stuList.add(stu) ;  
  56.             }  
  57.             pageModel = new PageModel() ;  
  58.             pageModel.setList(stuList) ;  
  59.             pageModel.setTotalRecords(getTotalRecords(conn)) ;  
  60.             pageModel.setPageSize(pageSize);  
  61.             pageModel.setPageNo(pageNo);  
  62.         }catch(Exception e){  
  63.             e.printStackTrace() ;  
  64.         }finally{  
  65.             DbUtil.close(rs) ;  
  66.             DbUtil.close(pstmt) ;  
  67.             DbUtil.close(conn) ;  
  68.         }  
  69.         return pageModel ;  
  70.     }  
  71.     /** 
  72.      * 取得总记录数 
  73.      * @param conn 
  74.      * @return 
  75.      */  
  76.     private int getTotalRecords(Connection conn)   
  77.     throws SQLException {  
  78.         String sql = "select count(*) from t_student";  
  79.         PreparedStatement pstmt = null;  
  80.         ResultSet rs = null;  
  81.         int count = 0;  
  82.         try {  
  83.             pstmt = conn.prepareStatement(sql);  
  84.             rs = pstmt.executeQuery();  
  85.             rs.next();  
  86.             count = rs.getInt(1);  
  87.         }finally {  
  88.             DbUtil.close(rs);  
  89.             DbUtil.close(pstmt);  
  90.         }  
  91.         return count;  
  92.     }  
  93. }  

 创建分页模型类实现业务逻辑:package com.stmcc.test.util;

Java代码  收藏代码
  1. import java.util.* ;  
  2. public class PageModel {  
  3.   
  4.     //结果集  
  5.     private List list ;  
  6.       
  7.     //查询总记录数  
  8.     private int totalRecords ;  
  9.       
  10.     //每页多少条数据  
  11.     private int pageSize ;  
  12.       
  13.     //第几页  
  14.     private int pageNo ;  
  15.       
  16.     /** 
  17.      * 总页数 
  18.      * @return 
  19.      */  
  20.     public int getTotalPages(){  
  21.         return (totalRecords + pageSize -1) / pageSize ;  
  22.     }  
  23.       
  24.     /** 
  25.      * 取得首页 
  26.      * @return 
  27.      */  
  28.     public int getTopPageNo(){  
  29.         return 1 ;  
  30.     }  
  31.       
  32.     /** 
  33.      * 上一页 
  34.      * @return 
  35.      */  
  36.     public int getPreviousPageNo(){  
  37.         if(pageNo <= 1){  
  38.             return 1 ;  
  39.         }  
  40.         return pageNo - 1 ;  
  41.     }  
  42.       
  43.     /** 
  44.      * 下一页 
  45.      * @return 
  46.      */  
  47.     public int getNextPageNo(){  
  48.         if(pageNo >= getBottomPageNo()){  
  49.             return getBottomPageNo() ;  
  50.         }  
  51.         return pageNo + 1 ;  
  52.     }  
  53.       
  54.     /** 
  55.      * 取得尾页 
  56.      * @return 
  57.      */  
  58.     public int getBottomPageNo(){  
  59.         return getTotalPages() ;  
  60.     }  
  61.   
  62.     public List getList() {  
  63.         return list;  
  64.     }  
  65.   
  66.     public void setList(List list) {  
  67.         this.list = list;  
  68.     }  
  69.   
  70.     public int getTotalRecords() {  
  71.         return totalRecords;  
  72.     }  
  73.   
  74.     public void setTotalRecords(int totalRecords) {  
  75.         this.totalRecords = totalRecords;  
  76.     }  
  77.   
  78.     public int getPageSize() {  
  79.         return pageSize;  
  80.     }  
  81.   
  82.     public void setPageSize(int pageSize) {  
  83.         this.pageSize = pageSize;  
  84.     }  
  85.   
  86.     public int getPageNo() {  
  87.         return pageNo;  
  88.     }  
  89.   
  90.     public void setPageNo(int pageNo) {  
  91.         this.pageNo = pageNo;  
  92.     }  
  93. }  

 jsp页面:<%@ page contentType="text/html" pageEncoding="GBK"%>

Java代码  收藏代码
  1. <%@ page import="com.stmcc.test.util.*"%>  
  2. <%@ page import="com.stmcc.test.*"%>  
  3. <%@ page import="java.sql.*"%>  
  4. <%@ page import="java.util.*"%>  
  5. <html>  
  6. <head><title>分页展示</title></head>  
  7. <%  
  8.     int pageNo = 1 ;  
  9.     int pageSize = 5 ;  
  10.     String pageNoString = request.getParameter("pageNo") ;  
  11.     if(pageNoString != null){  
  12.         pageNo = Integer.parseInt(pageNoString) ;  
  13.     }  
  14.     PageModel pageModel = StuManager.getInstance().findStudentList(pageNo,pageSize) ;  
  15. %>  
  16. <script type="text/javaScript">  
  17.     function topPage() {  
  18.         window.self.location = "student.jsp?pageNo=<%=pageModel.getTopPageNo()%>";  
  19.     }  
  20.       
  21.     function previousPage() {  
  22.         window.self.location = "student.jsp?pageNo=<%=pageModel.getPreviousPageNo()%>";  
  23.     }     
  24.       
  25.     function nextPage() {  
  26.         window.self.location = "student.jsp?pageNo=<%=pageModel.getNextPageNo()%>";  
  27.     }  
  28.       
  29.     function bottomPage() {  
  30.         window.self.location = "student.jsp?pageNo=<%=pageModel.getBottomPageNo()%>";  
  31.     }  
  32. </script>  
  33. <body>  
  34. <center>  
  35.   <table border="1">  
  36.   <tr>  
  37.     <td>学生编号</td>  
  38.     <td>学生姓名</td>  
  39.     <td>学生年龄</td>  
  40.     <td>学生性别</td>  
  41.     <td>学生班级</td>  
  42.   </tr>  
  43.   <%  
  44.     List stuList = pageModel.getList() ;  
  45.     for(Iterator<Student> iter = stuList.iterator(); iter.hasNext();){  
  46.         Student stu = iter.next() ;  
  47.   %>  
  48.   <tr>  
  49.     <td><%=stu.getS_id() %></td>  
  50.     <td><%=stu.getS_name() %></td>  
  51.     <td><%=stu.getS_age() %></td>  
  52.     <td><%=stu.getS_sex() %></td>  
  53.     <td><%=stu.getS_class() %></td>  
  54.   </tr>  
  55.   <%  
  56.     }  
  57.   %>  
  58.   <tr><td colspan="5">  
  59.       共&nbsp;<%=pageModel.getTotalPages() %>&nbsp;页&nbsp;&nbsp;&nbsp;&nbsp;  
  60.       当前第&nbsp;<%=pageModel.getPageNo() %>页&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
  61.   <input type="button" value="首页" onClick="topPage()">  
  62.   <input type="button" value="上一页" onClick="previousPage()">  
  63.   <input type="button" value="下一页" onClick="nextPage()">  
  64.   <input type="button" value="尾页" onClick="bottomPage()">  
  65.   </td></tr>  
  66.   </table>  
  67. </center>  
  68. </body>  
  69. </html>  

posted on 2011-09-07 02:21 大龙 阅读(462) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理