jdbc分页查询
虽然现在db层的框架很多,用起来也非常的方便,像分页这种非常常用的功能也基本上都有对应的接口可以直接使用。但是有时候数据源不在配置的范围的时候,就必须要使用到jdbc来执行sql,jdbc执行的是原生的sql,所以就没有什么分页接口可以调用了。这时候就要用到两个方法,一个是PreparedStatement的setMaxRows()方法,这个用来设置本次查询返回结果集数的最大数量,另一个是ResultSet的absolute()方法,这个用来设置结果集偏移的位置,当然还有一个ResultSet的relative()方法,这个方法和absolute()类似,只是一个是相对于整个结果集,一个是相对与当前位置。下面是实例:
- public ResultSet getPageByAbsolute(String sql,
- int pageNo,int pageSize) throws SQLException {
- PreparedStatement pre = getConn().prepareStatement(sql);
- pre.setMaxRows(pageNo*pageSize);
- ResultSet rs = pre.executeQuery();
- rs.absolute((pageNo - 1)*pageSize);
- return rs;
- }
ResultSet的游标会比结果集多两个,一个是最头,一个是最尾,所以在做偏移的时候要考虑到这两个游标,ResultSet的游标是从0开始的,比如现在要查询每页数量为20条的第2页的数据,那么就需要跳过前21个下标,从游标21开始才是第二页的数据,按照上面的方法只偏移了20,返回的rs的当前游标位置为20,所以在使用的时候需要再执行一下ResultSet的next()方法才是第二页的数据,考虑到一般在使用rs的时候都是while(rs.next()){。。。}这种方式,所以这样正好可以正确的获取到数据,relative()方法在这里体现不出它的功能特性,而且分页的话用absolute()方法就足够了,上面的方法把absolute换成relative也是一样的效果,因为一开始的当前位置就是0,跟absolute相对的位置是一样的。
在使用的时候要特别注意的是PreparedStatement 对象在创建的时候一定要加上ResultSet.TYPE_SCROLL_SENSITIVE和ResultSet.CONCUR_READ_ONLY这两个参数,如下:
PreparedStatement pre = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
不然的话会报java.sql.SQLException: 对只读结果集的无效操作的异常。
jdbc分页查询的更多相关文章
- JDBC分页查询及实现
当数据过多时,一页之内是无法显示的,因此需要进行分页显示. (一)分页技术实现: 物理分页: - 在数据库执行查询时(实现分页查询),查询需要的数据--依赖数据库的SQL语句 - 在sql查询时,从数 ...
- jdbc之分页查询
分页查询作为一项十分重要的数据库查询技术,在很多web项目中都会要用到,当然移动开发中也是会涉及的. 一.分页查询的sql语句: ps:为了方便阐述,下面统一使用student表作为查询的表:colN ...
- 分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)
分页查询信息 使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...
- JDBC在Java Web中的应用——分页查询
分页查询 通过JDBC实现分页查询的方法有很多种,而且不同的数据库机制也提供了不同的分页方式,在这里介绍两种非常典型的分页方法. 通过ResultSet的光标实现分页 通过ResultSet的光标实现 ...
- JDBC使用游标实现分页查询的方法
本文实例讲述了JDBC使用游标实现分页查询的方法.分享给大家供大家参考,具体如下: /** * 一次只从数据库中查询最大maxCount条记录 * @param sql 传入的sql语句 * @par ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MyBatis简单的增删改查以及简单的分页查询实现
MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...
- Java GUI+mysql+分页查询
1.要求 : 创建一个学生信息管理数据库 2.实现分页查询 代码如下: a)学生实体类: /** * @author: Annie * @date:2016年6月23日 * @description: ...
- 基于Mysql数据库的SSM分页查询
前言: Hello,本Y又来了,"分页"在我们使用软件的过程中是一个很常见的场景,比如博客园对于每个博主的博客都进行了分页展示.可以简单清晰的展示数据,防止一下子将过多的数据展现给 ...
随机推荐
- SaltStack学习系列之State安装Nginx+PHP环境
目录结构 |-- pillar | |-- nginx | | `-- nginx.sls #nginx变量(key:value) | `-- top.sls `-- salt|-- init #初始 ...
- Office Excel找不到PERSONAL.XLS怎么办
网上有人说这个文件在XLSTART里面,但是我里面没东西 打开PERSONAL.XLS的情况下,点击文件,属性,弹出窗口就有他的位置 你还是直接用Everything搜索一下吧.
- SDUTOJ 2476Period
#include<iostream> #include<string.h> #include<stdio.h> #define N 1000010 using na ...
- CSS Modules 解决 react 项目 css 样式互相影响的问题
1. CSS Modules引入目的 写过CSS的人,应该都对一大长串选择器选中一个元素不陌生吧,这种方式,其实定义的就是全局样式,我们时常会因为选择器权重问题,没有把我们想要的样式加上去. 另外,每 ...
- DEV Express控件VScorllBar控件使用
今天使用VScorllBall控件做了个控制界面上下滑动的功能,网上也找了这方面的资料,大概综合借鉴了一下之后,搞了一个适合我自己的自定义功能控件. 下面话不多说,直接上代码. private voi ...
- 鸟哥的Linux私房菜-----1、Linux是什么与怎样学习Linux
- ubuntu双网卡绑定配置
1,安装bonding需要的软件 sudo apt-get install ifenslave 2,在/etc/modules中加入: bonding mode= miimon= 3,在/etc/ne ...
- nRF52832之硬件I2C
这几天一直在折腾nRF52832的硬件I2C,到了今天最终出现了成果,在此也印证了那句话:"耕耘就有收获" 52832的硬件I2C尽管官方提供了demo,可是自己对I2C通信理解的 ...
- node.js 在函数内获取当前函数
js 如何在函数体内部知道 自己在哪个函数内运行呢? 打比方: function a() { // 我想在这里知道我的函数名a和函数function a () {...} } 使用Error的调用栈可 ...
- 简单脱壳教程笔记(7)---手脱PECompact2.X壳
本笔记是针对ximo早期发的脱壳基础视频教程.整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 简单介绍: F ...