基于oracle的分页功能(jdbc实现)

1.有一段时间一直用的hibernate进行页面的分页功能,很简单,后来一次突然是使用Jdbc进行查询分页,我第一反应是使用subList这个方法来取list的子集,但是遇到要读取三千条数据进行分页或者更多的时候,这样就会失去效率,后来使用oracel中的rownum实现了

2.首先看我们的目标数据(测试数据有点少)
基于oracle的分页功能(jdbc实现)_第1张图片

(具体jdbc连接数据库参考上篇博客,这里不再累述,这里还有一个Page分页类)
//查找全部结果集sql
String sql="select t.* from yz_test_tree t";
//查询结果集总量sql
String countSql = "select count(0) from ("+sql+")";
//开始执行第二个sql,设置结果集总条数
ps = conn.prepareStatement(countSql);
res = ps.executeQuery();
while (res.next()) {
                page.setTotalCount(res.getInt("COUNT(0)"));
            }
//执行第一个sql,查询需要的结果集
这里会有从前台传过来的分页参数(在Page中):
    1.currentPage,当前页(这里默认0,表示第一页)
    2.pageSize,每页显示条数(这里默认10//当前返回的数据从第(+1)条开始,这里是0表示从第一条到第十条   
int startPage = page.getCurrentPage*page.getPageSize();
String endSql = pagingByOracle(sql,startPage,page.getPageSize());
//执行endSql就是1-10条数据,我们需要的
ps = conn.prepareStatement(endSql);
res = ps.executeQuery();
while(res.next()){
//迭代出res的结果集返回到前台就可以了
}


//下面写实现分页工具类pagingByOracle
public String pagingByOracel(String sql,int startPage,int pageSize){
//当前页最大值
int maxPage = startPage+pageSize;
String endSql = "select * from ("+
  "select t.*,rownum row_ from (" +sql + ") t"+
     " where rownum<="+maxPage+
        ") where row_>"+startPage;
    return endSql;
}
//在这个编辑器拼装sql很麻烦,可能会存在小问题,我用oracle测一遍

3.结果
基于oracle的分页功能(jdbc实现)_第2张图片

这里就得到了第一页,1-10条数据
//rownum排序始终从1开始,所以,在设置开始数据值得时候,
  要先把rownum查出来,在进行比较选择

4.至于前台怎么分页,我使用的是jquery.pagination.js这个插件。下面就贴一下大概的代码,不具体介绍了。

<div id="pa" class="pagination">div>
        <script>
        //生成分页工具条
        $("#pa").pagination(
        ${page.totalCount}, //结果总数
        {
            //当前页,0表示第一页
           current_page: ${page.currentPage},
           //每页显示数据多少
           items_per_page: ${page.pageSize},
           //回调函数
            callback: 为翻页调用次函数
            }); 
        script>

5.分页就这样做完了,具体这个分页工具要导入对应的js和css,还有一些参数的设定就根据自己的需求来,可以全看api之类的介绍。

你可能感兴趣的:(JQuery,oracle,JDBC)