一、了解数据库指令

Oracle数据库相对于MySQL数据库来说,要实现分页查看,Oracle中没有像MySQL里的limit命令,使用的Oracle语句也比较复杂

select * from (select rownum r,e. * from 要分页的表 e where rownum<=m*n) t where r>m*n-m ;

注:要分页的表 后面的e:是给表取的别名

rownum  r为行的别名

例如:

select * from (select t2.*,rownum rn from (select t1.* from tb1_user t1 ) t2) where rn>=1 and rn<=4

利用这样类似的数据库操作命令,我们来实现分页(分页最主要的几个元素是,页面的大小和当前的页码

页面大小:我们可以根据前端显示效果自定义大小

当前页码:这个元素我们不能像MySQL指令一样,mysql指定行索引和页面的大小,就可以查询你从你指定行开始,查询到指定大小的数据。

如图所示:

而Oracle运用上述语句执行结果如图所示,根据下面图可以看出,(第一个参数rn也是行索引,后面的参数约束也是行索引,查询到的数据条数就和MySQL就有出路 。)

①Oracle:根据简单的换算,看下面的表达式换算可以得出你你想要的的分页查询

select * from (select t2.*,rownum rn from (select t1.* from tb1_user t1 order by id) t2) where rn>? and rn<=?

第一个参数:页码=  (pageNumber-1)*pageSize

第二个参数:页的大小=pageSize*pageNumber(有最后索引减前一个索引获得页面的大小)

②MySql:根据简单的计算看下面的表达式换算可以得出你你想要的的分页查询

String sql = "select id,stuId,stuName,score from stu limit ?,?";

第一个参数:页码=pageNumber-1)*pageSize

第二个参数:页的大小=pageSize(直接指定大小)

二、从数据库获取数据(dao层方法)

public ArrayListturnPageD(int pageNumber, int pageSize) {

ArrayListlist = new ArrayList<>();

User u = null;

Connection conn = null;

ResultSet resultSet = null;

PreparedStatement statement = null;

try {

conn = DbUtil.getConnection();//链接数据库

/*oracle 不支持分页limit命令*/

String sql = "select * from (select t2.*,rownum rn from (select t1.* from tb1_user t1 order by id) t2) where rn>? and rn<=?";

statement = conn.prepareStatement(sql);

statement.setInt(1,(pageNumber-1)*pageSize);

statement.setInt(2, pageSize*pageNumber);

resultSet = statement.executeQuery();

if (resultSet != null) {

while (resultSet.next()) {

u = new User();

u.setId(resultSet.getInt(1));

u.setUserCode(resultSet.getString(2));

u.setUserName(resultSet.getString(3));

u.setUserPassword(resultSet.getString(4));

u.setGender(resultSet.getInt(5));

u.setBirthday(resultSet.getDate("birthday"));

u.setPhone(resultSet.getString(7));

u.setAddress(resultSet.getString(8));

u.setCreateBy(resultSet.getInt(9));

u.setCreationDate(resultSet.getDate("creationDate"));

u.setModifyBy(resultSet.getInt(11));

u.setModifyDate(resultSet.getDate("modifyDate"));

u.setUserRole(resultSet.getInt("userRole"));

list.add(u);

}

System.out.println("添加数据成功!!");

}

} catch (SQLException e) {

System.out.println("查看数据失败!!");

e.printStackTrace();

} finally {

try {

statement.close();

conn.close();

resultSet.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return list;

}

三、将获取的数据渲染到界面(控制层)

jsp页码控制

显示效果为:共xx码        首页    上一页 下一页   尾页

利用EL表达式来处理:

首页:1

上一页为 :${requestScope.curPage<=1?1:requestScope.curPage-1}

利用三目运算符 如果点击上一页面时,页码数小于等于1,就跳转到首页,否知页码数减一: 下一页也如此。

共${requestScope.recordCount}条记录   ${requestScope.curPage}/${requestScope.param}   页

首页

上一页

下一页

最后一页

控制层是直接关联的jsp页面显示的,分页时,我们需要自定义页面的大小,真正关心的是页码。

对于分页显示而言,首先点击查看数据是我们就已经分好页。对于这个操作,我们点击时就从前台发送了一个servlet请求,请求获取页面的的数据,而我们的页码是根据前端页面,点击上一页、下一页获取而来的。这就会导致一个问题,第一次获取来的页码参数为空(req.getParameter("page")==null),因此要做空的判断,然后自定义页面数据( list = userService.turnPageS(1,8);),而从第二次请求而言:page值就不为空了。这样分页显示就完成了。

if(method.equals("select")){

Listlist = userService.selectAllUserS();

int recordCount = list.size();/*获取记录条数*/

req.setAttribute("param",recordCount/8+1);/*记录页数为:记录总数/页面显示记数

*+1将记录条数发送给页面*/

req.setAttribute("recordCount",recordCount);

int page = 1;

if(req.getParameter("page")==null){ //首次访问时不能获取页码

list = userService.turnPageS(1,8); //首次访问将page值置为1 默认显示首页

}else{

page = Integer.parseInt(req.getParameter("page"));//获取接下来的当前页码

list = userService.turnPageS(page,8);

}

req.setAttribute("listUser",list);

req.setAttribute("curPage",page);//首次访问时将页码1传送给前端页面

System.out.println("curpage:"+page);

req.getRequestDispatcher("admin/userlist.jsp").forward(req, resp);

}

javaweb分页查询oracle,JavaWeb项目 利用Oracle数据库实现分页查看细讲相关推荐

  1. oracle mssql 实例,oracle,mysql,SqlServer三种数据库的分页查询的实例

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数, ...

  2. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

  3. jsp oracle连接池,利用Oracle自带的连接池类的一例

    利用Oracle自带的连接池类的一例 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 /** 封装了对数据库的连接,用于处理SQL语句. @author:ya ...

  4. oracle 抽样_利用ORACLE实现数据抽样

    做数据分析的,免不了碰到记录数据量很大,怎么办? 做全面分析是不现实也没有必要. 介绍一下抽样方法及实现 几种常用的抽样方法: 1.简单随机抽样(simple random sampling) 将所有 ...

  5. oracle 抽样_利用ORACLE实现数据抽样(sample block)

    转自:http://blog.sina.com.cn/s/blog_4b13ec250100wm14.html 做数据分析的,免不了碰到记录数据量很大,怎么办? 做全面分析是不现实也没有必要. 介绍一 ...

  6. oracle存储过程备份,利用ORACLE存储过程与JOB结合实现对数据表自动备份

    烈火网(LieHuo.Net)教程 利用ORACLE存储过程与JOB结合实现对数据表自动备份. 1.创建存储过程 create or replace procedure data_auto_backu ...

  7. 利用oracle执行系统命令,利用oracle存储过程执行操作系统命令(转)

    以下方法在WINNT,LINUX下的oracle9i上测试通过,java过程调用系统命令 首先给使用java存储过程的用户授予一定的权限 <>表示所有文件,也可以单独指定文件. r w e ...

  8. mysql 分页查询web_JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)...

    JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)-1.jpg (40.23 KB, 下载次数: 0) 2018-8-18 13:34 上传 在开发过程中,经常做的一件事,也是最基本的事 ...

  9. jpa mysql sql分页查询语句_JPA多条件复杂SQL动态分页查询功能

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

最新文章

  1. 邢波出任全球第一所AI大学校长,履历横跨三门学科
  2. linux NFS配置:NFS相关概念及其配置与查看
  3. Kotlin 与 Java 比较
  4. 前端学习01-04格式标签
  5. mysql 开放远程连接权限连不上
  6. iOS之十三个小技巧帮你征服Xcode
  7. python中if __name__ == __main__的解释
  8. hdu 1806线段树 区间合并
  9. 概括ADO.NET数据库连接的所有形式(基础)
  10. NAS+CNN+Transformer=ViT-Res!MIT团队重磅开源ViT-Res,精度高于DeiT-Ti8.6%
  11. 初学Phreeze 3
  12. 我晕,代码又写错了,操你大爷
  13. 广东技能大赛软件测试项目,我校喜获2019年全国职业院校技能大赛软件测试赛项二等奖...
  14. python docx table 边框_使用pythondocx指定表中的边框外观
  15. [ACCESS]档案数字化加工录入系统使用说明(干部职工退休档案)
  16. 百色职称计算机,初级职称申请百色
  17. java倒计时器_Java并发系列5--倒计时器CountDownLatch
  18. sass 转换为 css
  19. 05_JUC强大的辅助类
  20. linux修改禅道端口,CentOS7上安装了gitlab和禅道,改了禅道端口访问不了

热门文章

  1. java poi excel 单元格样式_java poi批量导出excel 设置单元格样式
  2. Virtual DOM和diff算法 概念理解
  3. echarts点击事件调用模态框,模态框中存在echarts
  4. Docker(二)基本操作命令
  5. 阿里深度学习框架开源了!无缝对接TensorFlow、PyTorch
  6. 13个开发者技能必知必会!
  7. Servicehot:混合云泄露四大公有云的秘密
  8. 【BZOJ1043】下落的圆盘 [计算几何]
  9. WinForm窗体拖动代码
  10. 浏览器中关于事件的那点事儿