使用jdbc分页取出oracle数据

首先是分页工具类

如下代码:

 

  1 public class PageKit {
  2     /**
  3      * 当前第几页
  4      */
  5     private int page;
  6     /**
  7      * 每页条数
  8      */
  9     private int pageSize;
 10     /**
 11      * 总页数
 12      */
 13     private int totalPage;
 14     /**
 15      * 总条数
 16      */
 17     private int total;
 18     /**
 19      * 当前启始页
 20      */
 21     private int offer;
 22 
 23     /**
 24      * oracle 分页 开始页码
 25      */
 26     private int startPage;
 27     /**
 28      * oracle 分页 结束页码
 29      */
 30     private int endPage;
 31 
 32     public int getStartPage() {
 33         return startPage;
 34     }
 35 
 36     public void setStartPage(int startPage) {
 37         this.startPage = startPage;
 38     }
 39 
 40     public int getEndPage() {
 41         return endPage;
 42     }
 43 
 44     public void setEndPage(int endPage) {
 45         this.endPage = endPage;
 46     }
 47 
 48     public int getPage() {
 49         return page;
 50     }
 51 
 52     public void setPage(int page) {
 53         this.page = page;
 54     }
 55 
 56     public int getPageSize() {
 57         return pageSize;
 58     }
 59 
 60     public void setPageSize(int pageSize) {
 61         this.pageSize = pageSize;
 62     }
 63 
 64     public int getTotalPage() {
 65         return totalPage;
 66     }
 67 
 68     public void setTotalPage(int totalPage) {
 69         this.totalPage = totalPage;
 70     }
 71 
 72     public int getTotal() {
 73         return total;
 74     }
 75 
 76     public void setTotal(int total) {
 77         this.total = total;
 78     }
 79 
 80     public int getOffer() {
 81         return offer;
 82     }
 83 
 84     public void setOffer(int offer) {
 85         this.offer = offer;
 86     }
 87 
 88     public PageKit(int page, int pageSize) {
 89         this.page = page;
 90         this.pageSize = pageSize;
 91         resetOffer();
 92     }
 93 
 94     public PageKit(int page, int pageSize, int total) {
 95         this.page = page;
 96         this.pageSize = pageSize;
 97         this.total = total;
 98         resetOffer();
 99     }
100 
101     public void exec(PageHandler handler){
102         do {
103             String str = " curr page : %s ,total page : %s, curr page num: %s,page size: %s" ;
104             log.info(String.format(str, page,totalPage,offer,pageSize));
105             handler.exec(this);
106             page++;
107             resetOffer();
108         } while (totalPage  > page);
109     }
110 
111     public void execOracle(PageOracleHandler handler){
112         boolean exec;
113         do {
114             String str = " curr page : %s ,total page : %s, start page: %s,end page: %s" ;
115             log.info(String.format(str, page,totalPage,startPage,endPage));
116             // list条数小于每页个数说明已到最后一页,返回false
117             exec = handler.exec(this);
118             page++;
119             resetOffer();
120         } while (exec);
121     }
122 
123     private void resetOffer() {
124         int i = page * pageSize;
125         this.offer = page == 0 ? 0 : i;
126         //mysql 使用的分类参数
127         if (pageSize == 0) {
128             totalPage = 0;
129         } else {
130             totalPage = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
131         }
132 
133         //oracle 使用的分类参数 分页从1开始,
134         this.startPage = offer + 1;
135         this.endPage = pageSize + offer;
136     }
137     @FunctionalInterface
138     public  interface PageOracleHandler{
139         /**
140          * oracle 分页处理器
141          * @param pageKit 分页
142          */
143         boolean exec(PageKit pageKit);
144     }
145 
146     @FunctionalInterface
147     public  interface PageHandler{
148         /**
149          * mysql
150          * @param pageKit 分页
151          */
152         void exec(PageKit pageKit);
153     }
154 }

2. 下面是直接分页逻辑代码 

 

 1 void jdbc() {
 2         ResultSet rs = null;
 3         PreparedStatement stmt = null;
 4         Connection conn = null;
 5         try {
 6             Class.forName("oracle.jdbc.driver.OracleDriver");
 7             String dbURL = "jdbc:oracle:thin:@localhost:1521:system";
 8             conn = DriverManager.getConnection(dbURL, "wang01", "wang01");
 9             System.out.println("连接成功");
10 
11             PageKit kit = new PageKit(0,3);
12             Connection finalConn = conn;
13             kit.execOracle(pageKit -> {
14                 PreparedStatement preparedStatement = null;
15                 ResultSet resultSet = null;
16                 List<String> list = new ArrayList<>();
17                 try {
18                     String sql = "select \"ju.phone\" as phone from (select rownum as rn,a.* from my_view_phone a )  where rn >= ? and rn <=? ";
19                     preparedStatement = finalConn.prepareStatement(sql);
20                     preparedStatement.setInt(1,pageKit.getStartPage());
21                     preparedStatement.setInt(2,pageKit.getEndPage());
22                     resultSet = preparedStatement.executeQuery();
23                     while (resultSet.next()) {
24                         String name = resultSet.getString("phone");
25                         list.add(name);
26                     }
27                     System.out.println(list);
28                     return list.size() >= pageKit.getPageSize();
29                 } catch (SQLException throwables) {
30                     throwables.printStackTrace();
31                 }finally {
32                     try {
33                         if (resultSet != null) {
34                             resultSet.close();
35                             resultSet = null;
36                         }
37                         if (preparedStatement != null) {
38                             preparedStatement.close();
39                             preparedStatement = null;
40                         }
41                     } catch (SQLException e) {
42                         e.printStackTrace();
43                     }
44                 }
45                 return false;
46             });
47         } catch (SQLException | ClassNotFoundException e) {
48             e.printStackTrace();
49         } finally {
50             try {
51                 if (rs != null) {
52                     rs.close();
53                     rs = null;
54                 }
55                 if (stmt != null) {
56                     stmt.close();
57                     stmt = null;
58                 }
59                 if (conn != null) {
60                     conn.close();
61                     conn = null;
62                 }
63             } catch (SQLException e) {
64                 e.printStackTrace();
65             }
66         }
67     }
View Code

3,总共8条数据,每页3条。

15:49:53.237 [main] INFO PageKit - curr page : 0 ,total page : 0, start page: 1,end page: 3
[13811125522, 13811125523, 13811125524]
15:49:53.370 [main] INFO PageKit - curr page : 1 ,total page : 0, start page: 4,end page: 6
[13811125525, 13811125526, 13811125527]
15:49:53.428 [main] INFO PageKit - curr page : 2 ,total page : 0, start page: 7,end page: 9
[13811125528, 222]

posted @ 2020-10-21 16:01  quentin2017  阅读(185)  评论(0)    收藏  举报