首先oracle分页查询数据可以使用rownum和子查询联合实现;具体sql语句为:

SELECT ID,numbers,NAME,(CASE gender WHEN 1 THEN '男' WHEN 0 THEN '女' END)
,birth,phone,daid,cid,apartment FROM (SELECT ROWNUM rt,s1.* FROM students s1WHERE ROWNUM <=20) s2 WHERE s2.rt>=11 ;

jdbc实现分页查询方法:
一、创建数据库属性配置文件DataSource.properties

##数据库属性配置
jdbc_url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc_driver=oracle.jdbc.driver.OracleDriver
jdbc_user=system
jdbc_passwd=123456

二、创建数据库属性文件读取类Env

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class Env extends Properties{//配置字符串常量存储数据库连接属性值public static final String JDBC_URL;//连接数据库系统资源描述符public static final String JDBC_DRIVER;//数据库系统驱动类名称public static final String JDBC_USER;//登录数据库系统用户名public static final String JDBC_PASSWD;//登录数据库系统密码private static Env env;//定义外部类(数据库属性配置文件)的相对路径及文件名private static String filePath = "cn/yanchengdai/db/conf/DataSource.properties";private Env() {}static {if(env==null) {env = new Env();}InputStream input = null;//获取当前程序发布的类路径
//      String path = env.getClass().getClassLoader().getResource("").getPath();
//      System.out.println(path);//获取当前程序发布的类路径下目标文件输入流input = env.getClass().getClassLoader().getResourceAsStream(filePath);try {env.load(input);} catch (IOException e) {e.printStackTrace();}JDBC_URL = env.getProperty("jdbc_url");JDBC_DRIVER = env.getProperty("jdbc_driver");JDBC_USER = env.getProperty("jdbc_user");JDBC_PASSWD = env.getProperty("jdbc_passwd");}}

三、创建数据库连接池(本文这里使用C3P0连接池)

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.mchange.v2.c3p0.ComboPooledDataSource;public final class DataSourceForPool {private static  ComboPooledDataSource c3p0;/*** 获取数据库连接池实例* @return ComboPooledDataSource 获取连接池实例*/public static ComboPooledDataSource createComboPooledDataSource() {if(c3p0==null) {c3p0 = new ComboPooledDataSource();}try {c3p0.setJdbcUrl(Env.JDBC_URL);c3p0.setDriverClass(Env.JDBC_DRIVER);c3p0.setUser(Env.JDBC_USER);c3p0.setPassword(Env.JDBC_PASSWD);c3p0.setMaxPoolSize(10);c3p0.setCheckoutTimeout(5000);} catch (PropertyVetoException e) {e.printStackTrace();}return c3p0;}/*** 获取Connection接口的通用方法* @return Connection*/public static Connection getConnection() {Connection conn = null;createComboPooledDataSource();//创建数据源try {conn = c3p0.getConnection();//获取打开数据源的连接} catch (SQLException e) {e.printStackTrace();}return conn;}/*** 关闭数据库连接* @param conn*/public void closeConnection(Connection conn) {try {if(conn!=null&&!conn.isClosed()) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 关闭statement* @param st*/public void closeStatement(Statement st) {try {if(st!=null&&!st.isClosed()) {st.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 关闭查询结果集* @param rs*/public void closeResultSet(ResultSet rs) {try {if(rs!=null&&!rs.isClosed()) {rs.close();}} catch (SQLException e) {e.printStackTrace();}}
}

四、创建数据库访问组件StudentsDao

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import cn.yanchengdai.util.DataSourceForPool;public class StudentsDao {/*** 将查询的结果集封装进Map中* @param pageSize 每页的记录条数* @param pageCurrNum 当前查询的页码* @return Map 封装的分页询的结果集*/public Map<String,Object> queryPaging(int pageSize, int pageCurrNum){Map<String,Object> map = new HashMap<>();Connection conn = null;/*统计所有记录总数rowCount*/int rowCount = 0;/*统计记录总数的sql语句*/String sql1 = "SELECT COUNT(ID) FROM students";/*查询分页sql语句*/String sql2 = "SELECT ID,numbers,NAME,(CASE gender WHEN 1 THEN '男' WHEN 0 THEN '女' END),"+ "birth,phone,daid,cid,apartment FROM (SELECT ROWNUM rt,s1.* FROM students s1 "+ "WHERE ROWNUM <=?) s2 WHERE s2.rt>=?";/*声明statement*/PreparedStatement ps1 = null;PreparedStatement ps2 = null;/*声明结果集*/ResultSet rs1 = null;ResultSet rs2 = null;try {/*获取连接*/conn = DataSourceForPool.getConnection();ps1 = conn.prepareStatement(sql1);rs1 = ps1.executeQuery();while(rs1.next()) {rowCount = rs1.getInt(1);}map.put("rowCount", rowCount);/*统计总页数*/int pagingSum = countPaging(rowCount,pageSize);map.put("pagingSum", pagingSum);/*查询分页结果集*/ps2 = conn.prepareStatement(sql2);ps2.setInt(1, pageSize*pageCurrNum);ps2.setInt(2, (pageCurrNum-1)*pageSize+1);rs2 = ps2.executeQuery();List<Map<String,Object>> rows = new ArrayList<>();while(rs2.next()) {Map<String,Object> mapRs = new HashMap<>();mapRs.put("id", rs2.getObject(1));mapRs.put("numbers", rs2.getObject(2));mapRs.put("name", rs2.getObject(3));mapRs.put("gender", rs2.getObject(4));mapRs.put("birth", rs2.getObject(5));mapRs.put("phone", rs2.getObject(6));mapRs.put("daid", rs2.getObject(7));mapRs.put("cid", rs2.getObject(8));mapRs.put("apartment", rs2.getObject(9));rows.add(mapRs);}map.put("rows", rows);} catch (SQLException e) {e.printStackTrace();}finally {try {/*关闭连接*/rs2.close();rs1.close();ps2.close();ps1.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}return map;}/*** 获取总页数* @param rowCount 查询的总记录数* @param rowSize 每页的纪录数* @return int*/public int countPaging(int rowCount,int rowSize) {return rowCount % rowSize ==0? (rowCount / rowSize):(rowCount / rowSize)+1;}
}

五、创建测试类测试分页查询QueryPagingTest

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;import cn.yanchengdai.dao.StudentsDao;public class QueryPagingTest {public static void main(String[] args) {Map<String,Object> map = new HashMap<String,Object>();Scanner in = new Scanner(System.in);System.out.println("请输入每页的条目总数");int pageSize = in.nextInt();System.out.println("请输入需要查询的页码");int pageCurrNum = in.nextInt();map = new StudentsDao().queryPaging(pageSize, pageCurrNum);List<Map<String,Object>> rows = new ArrayList<>();rows = (List)map.get("rows");System.out.println("编号\t姓名\t性别\t生日\t\t电话号码");for(Map m:rows) {System.out.println(m.get("id")+"\t"+m.get("name")+"\t"+m.get("gender")+"\t"+new SimpleDateFormat("yyyy-MM-dd").format(m.get("birth"))+"\t"+m.get("phone"));}}}

按照每页10条记录,第三页的数据如下,与pl/sql中结果一致:

jdbc分页查询的简单实现相关推荐

  1. mysql jdbc 分页查询_JDBC与MySQL实现分页查询技术

    由于通过ResultSet的光标实现数据分页存在占用大量资源等性能方便的缺陷,所以,在实际开发中,通过采用数据库的分页机制来实现分页查询功能更为上上之策. 下面我就通过MySQL数据库提供的分页机制来 ...

  2. JDBC分页查询及实现

    当数据过多时,一页之内是无法显示的,因此需要进行分页显示. (一)分页技术实现: 物理分页: - 在数据库执行查询时(实现分页查询),查询需要的数据--依赖数据库的SQL语句 - 在sql查询时,从数 ...

  3. java access 分页查询语句,简单又高效的Access分页语句

    Access实现分页其实也可以在查询语句里面做. 除了流行的top分页法之外,其实还有一种更简单,更容易理解,并且效率也不低的分页法. 先来一段传统的top分页法. SELECT TOP 10 * F ...

  4. Mybatis+springMVC+分页查询+前后端代码

    Mybatis+springMVC+分页查询+前后端代码 前言 我们在公司中经常会用到分页查询,最近,我在做一个公司的任务的时候,调用外部系统时需要将结果封装成分页的数据,之前我们都是直接调用我们公司 ...

  5. java中的分页 效率考虑_面试官:数据量很大,分页查询很慢,有什么优化方案?...

    当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点. 下面简单说一下我知道的一些 ...

  6. mysql临时表如何分页查询慢_数据量很大,分页查询很慢,怎么优化?

    作者:悠悠i,来源: http://uee.me/aVSnD 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分 ...

  7. SQL Server中的分页查询

    分页查询很简单,具体代码如下: --分页查询--查询1-3行数据 select top 3 * from emp order by sal desc;--查询4-6行数据 select top 3 * ...

  8. 面试官扎心一问:数据量很大,分页查询很慢,有什么优化方案?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/youyoui/p/7851007. ...

  9. 数据量很大,分页查询很慢,怎么破?

    https://www.cnblogs.com/youyoui/p/7851007.html 准备工作 一般分页查询 使用子查询优化 使用 id 限定优化 使用临时表优化 关于数据表的id说明 当需要 ...

最新文章

  1. 重磅 | 谷歌Waymo最新发布可完全脱离人类操控的自动驾驶汽车
  2. oracle的cols,Oracle cols_as_rows 比对数据
  3. Java基础学习巩固3--重载和重写分析及区别
  4. SQL Server使用convert对datetime日期数据进行转换
  5. 信息安全工程师笔记-操作系统安全保护
  6. 数据反正模拟 matlab,[2018年最新整理]信号处理MATLAB函数.doc
  7. Qt4_写FTP客户端
  8. Shell 神技:掩盖 Linux 服务器上的操作痕迹
  9. Atitit uri url urn 的概念区别 与联系 目录 1.1. 概念图 uri包括url和urn。。Urn一般是相对路径。。。 1 1.2. 统一资源名称 (Uniform Resourc
  10. android sd卡 spi,SD卡总结-SPI模式
  11. IDEA 找不到或无法加载主类
  12. python投资_python计算投资
  13. 20191202Spark
  14. 读博会改变人的性格吗?
  15. AB(罗克韦尔)PLC如何通过程序直接与外插SD卡进行数据读写?
  16. 通过Cli方式创建uni-app常见错误整理
  17. 维基解密说会帮科技公司解决漏洞 可后者并不买账
  18. IDEA中新导入的项目找不到maven project解决办法
  19. 【侯捷】C++STL标准库与泛型编程(第四讲)
  20. 深度学习--数学基础(1)

热门文章

  1. windows杀掉进程方法
  2. Python + 大数据 - 数仓实战之智能电商分析平台
  3. php5从数组取值,5.数组 · ThinkPHP5从入门到努力之入门实践 · 看云
  4. php数组的21个操作合并,拆分,删除,排序…
  5. matlab解决加速运动,推程余弦加速回程正弦加速运动MATLAB程序
  6. 一场你难以想象的比赛 | 2022 iFLYTEK A.I.开发者大赛携108道赛题强势来袭
  7. Mysql-InnoDB 事务-一致性读(快照读)
  8. jdbc执行sql出现错误: mismatched input ‘,’ excepting ‘.‘ 应该如何解决?
  9. 【其他】游戏理论研究
  10. 感悟:20条不被发现的职场潜规则