oracle、mysql分页实例

本文详细介绍Oracle与MySQL数据库中实现分页查询的方法。通过具体代码示例,展示了如何使用ROWNUM与LIMIT关键字进行高效分页操作,适用于不同场景的数据查询需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//----------------------------------------------------------------------------------------------------------------------------------oracle分页

jdbc.properties内容如下:

#ORACLE
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
userName=ZHAOYANG
password=ZHAOYANG

数据库连接工具类:

package study;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.tomcat.dbcp.dbcp2.ConnectionFactory;
//oracle连接工具类
public class ConnectFactory {
   private static Connection connection=null;
   
   static {
	   try {
		  Properties p=new Properties();
		  p.load(ConnectionFactory.class.getClassLoader().getResourceAsStream("jdbc.properties"));
		  String driver=p.getProperty("driver");
		  String url=p.getProperty("url");
		  String userName=p.getProperty("userName");
		  String password=p.getProperty("password");
		  System.out.println(driver);
		  
		  Class.forName(driver);
		  connection=DriverManager.getConnection(url,userName,password);
	   } catch (IOException e) {
			e.printStackTrace();
	   } catch (ClassNotFoundException e) {
		    e.printStackTrace();
	   } catch (SQLException e) {
			e.printStackTrace();
	   }
   }
   
   public static Connection getConnection() {
	   return connection;
   }
   
   public static void main(String[] args) {
	  System.out.println(connection);
   }
}

实现分页代码:

package dbpaging;
//oracle实现分页

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import study.ConnectFactory;

//将总记录数与每页记录数取余数,如果余数为0,则总页数等于总记录数除以每页记录数的商;
//如果余数不为0,则总页数等于总记录数除以每页记录数的商的基础上加1

//如果要查看的页码大于总页数,则要查看的页码等于总页数;
//如果要查看的页码小于1,则要查看的页码等于1
public class DeptDAO {
	/**
	 * @param page
	 *  要查看第几页
	 * @param pageSize
	 *  每页记录数
	 */
    public void findByPageOracle(int page,int pageSize) {
    	Connection con=null;
    	PreparedStatement stmt=null;
    	ResultSet rs=null;
    	int total=-1;//总记录数
    	int pages=-1;//总页数
    	
    	//用于查询总记录数
    	StringBuffer sql_total=new StringBuffer();
    	sql_total.append("SELECT COUNT(*) FROM DEPT");
    	
    	//用于分页sql语句
    	StringBuffer sql=new StringBuffer();
    	sql.append("SELECT * FROM (");
    	sql.append(" SELECT ROWNUM AS RN,DEPTNO,DNAME,LOC FROM DEPT");
    	sql.append(") WHERE RN BETWEEN ? AND ?");
    	
    	
    	try {
    		con=ConnectFactory.getConnection();
			stmt=con.prepareStatement(sql_total.toString());
			
			//获得总记录数
			rs=stmt.executeQuery();
			if(rs.next()) {
				total=rs.getInt(1);
			}
			
			//1、计算总页数:
			int mod=total%pageSize;
			if(mod==0) {
				pages=total/pageSize;
			}else {
				pages=total/pageSize+1;
			}
			
			//2、判断边界值:如果要查看的页数大于最大页,或者小于1,则取最后一页或第一页 
			if(page>pages) {
				page=pages;
			}else if(page<1) {
				page=1;
			}
			
			//3、取记录的起始跟结束位置
			int begin = (page - 1) * pageSize + 1;
			int end = begin + pageSize - 1;
			
			stmt=con.prepareStatement(sql.toString());
			stmt.setInt(1,begin);
			stmt.setInt(2,end);
			rs=stmt.executeQuery();
			while(rs.next()) {
				System.out.println(rs.getInt("DEPTNO")+","+rs.getString("DNAME")+","+rs.getString("LOC"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs!=null) {
				   rs.close();
				}
				if(stmt!=null) {
					stmt.close();
				}
				if(con!=null) {
					con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
    }
    
    public static void main(String[] args) {
		DeptDAO dao=new DeptDAO();
		dao.findByPageOracle(1,10);//查询第一页,每页10条记录
	}
}

//----------------------------------------------------------------------------------------------------------------------------------mysql分页

mysql.properties内容如下:

#mySql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/dbdetail
userName=root
password=123456

数据库连接工具类:

package study;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.tomcat.dbcp.dbcp2.ConnectionFactory;
//mysql连接工具类
public class ConnectFactory2 {
	   private static Connection connection=null;
	   
	   static {
		   try {
			  Properties p=new Properties();
			  p.load(ConnectionFactory.class.getClassLoader().getResourceAsStream("mysql.properties"));
			  String driver=p.getProperty("driver");
			  String url=p.getProperty("url");
			  String userName=p.getProperty("userName");
			  String password=p.getProperty("password");
			  System.out.println(driver);
			  
			  Class.forName(driver);
			  connection=DriverManager.getConnection(url,userName,password);
		   } catch (IOException e) {
				e.printStackTrace();
		   } catch (ClassNotFoundException e) {
			    e.printStackTrace();
		   } catch (SQLException e) {
				e.printStackTrace();
		   }
	   }
	   
	   public static Connection getConnection() {
		   return connection;
	   }
	   
	   public static void main(String[] args) {
		  System.out.println(connection);
	   }
}

mysql实现分页:

package dbpaging;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import study.ConnectFactory2;

//mysql实现分页

public class DeptDAO2 {
    public void findByPageMySQL(int page,int pageSize) {
    	Connection con=null;
    	PreparedStatement stmt=null;
    	ResultSet rs=null;
    	int total=-1;//总记录数
    	int pages=-1;//总页数
    	
    	StringBuffer sql_total=new StringBuffer();
    	sql_total.append("SELECT COUNT(*) FROM T_SYS_REGIONALISM");
    	
    	StringBuffer sql=new StringBuffer();
    	sql.append("SELECT * FROM T_SYS_REGIONALISM LIMIT ?,?");
    	
    	try {
    		con=ConnectFactory2.getConnection();
			stmt=con.prepareStatement(sql_total.toString());
			
			//获取总记录数
			rs=stmt.executeQuery();
			if(rs.next()) {
				total=rs.getInt(1);
			}
			
			//1、计算总页数
			int mod=total%pageSize;
			if(mod==0) {
				pages=total/pageSize;
			}else {
				pages=total/pageSize+1;
			}
			
			//2、判断边界值:如果要查看的页数大于最大页,或者小于1,则取最后一页或第一页 
			if(page>pages) {
				page=pages;
			}else if(page<1) {
				page=1;
			}
			
			//3、执行分页sql
			int start=(page-1)*pageSize;
			stmt=con.prepareStatement(sql.toString());
			stmt.setInt(1,start);
			stmt.setInt(2,pageSize);
			rs=stmt.executeQuery();
			while(rs.next()) {
				System.out.println(rs.getString("F_CODE")+","+rs.getString("F_NAME"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    public static void main(String[] args) {
		DeptDAO2 dao2=new DeptDAO2();
		dao2.findByPageMySQL(0, 10);//第几页,从0开始,每个多少条
	}
    
}

总结:

#ORACLE
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
userName=ZHAOYANG
password=ZHAOYANG

#mySql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/dbdetail
userName=root
password=123456

 

oracle靠rownum分页:

SELECT * FROM (
        SELECT ROWNUM AS RN,DEPTNO,DNAME,LOC FROM DEPT
 ) WHERE RN BETWEEN ? AND ?

参数1:int begin = (page - 1) * pageSize + 1;//page从1开始
参数2:int end = begin + pageSize - 1;

mysql 靠limit分页:

SELECT * FROM T_SYS_REGIONALISM LIMIT ?,?

参数1:int start=(page-1)*pageSize;//page从0开始

参数2:pageSize

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值