分页查询MsSQL数据库中的数据

本文介绍了一种在MySQL中实现分页查询的方法,包括计算总页数、每页记录数等关键步骤,并通过实例演示了如何通过用户输入的页码展示对应页面的数据。

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

查询MySQL数据库中数据时,数据量都比较大,此时需要分页显示。

分页需要的四个重要数据:

        1.每页显示数据量:pageSize;

        2.总数据量total,用count(*)方法获取;

        3.总页数pageCount。获取方式:1、total%pageSize==0?total/pageSize:total/pageSize+1;2、pageCount = (int)Math.ceil(total*1.0/pageSize)

               Math类中的向上取整方法 static double ceil(double a)Math.ceil(total*1.0/pageSize) 参数类型为double,所以total*1.0转型为double,然后(int)强转再赋值给pageCount。

        4.页码 pageNo
获取每页显示的数据    select * from 表名 limit (pageNo-1)*pageSize,pageSize
limit x,y    x:开始的下标,y:数量,第一页从0开始,显示pageSize条。
package com.qf.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import com.qf.bean.Emp;
import com.qf.utils.DBUtils;

/*
 * 分页显示 emp表中的数据
 * 要求
 * 	运行开始 
 *  控制台 显示 页码 和 第一页的内容
 *  然后 键盘录入页码 根据页码 显示不同也的内容
 *  需要定义四个变量 1.pageSize 2.total 3.pageCount 4.pageNo
 * */
public class Demo03 {

	private static int pageSize = 3;//每页显示3条
	private static int total; //总条数
	private static int pageCount;//总页数
	
	public static void main(String[] args) {
		//获取总条数
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			//获取总条数
			conn = DBUtils.getConnection();
			String sql = "select count(*) from emp";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			if(rs.next()){
				total = rs.getInt(1);
			}
			//根据总行数 和 每页显示条数 计算 页数 使用 ceil()方法 向上取整 
			pageCount = (int)Math.ceil(total*1.0/pageSize);
			//显示页面
			System.out.println("可选的页码数");
			for(int i=1;i<=pageCount;i++){
				System.out.print(i + " ");
			}
			System.out.println();
			//定义一个 页码变量 查询每页显示的数据 从第一页开始
			int pageNo = 1;
			print(pageNo);	
			//键盘录入页码 显示指定页的数据
			do{
				System.out.println("请输入页码::");
				Scanner sc = new Scanner(System.in);
				pageNo = sc.nextInt();
				if(pageNo <= pageCount && pageNo >0 ){
					System.out.println("第"+pageNo+"页的数据有:");
					print(pageNo);
				}else{
					System.out.println("页码输入错误");
				}
			}while(pageNo <= pageCount && pageNo >0);
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//控制台输出该页数据
	private static void print(int pageNo) {
		List<Emp> dataList = getDate(pageNo);
		Iterator<Emp> it = dataList.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
	//连接数据库 根据页码 查询 当页显示的数据,创建Emp实体类,封装获取到的数据
	public static List<Emp> getDate(int pageNo){
		//创建list集合存储数据
		List<Emp> list = new ArrayList<>();
		try {
			//连接数据库,获取其中数据
			Connection conn = DBUtils.getConnection();
			String sql = "select * from emp limit ?,?";
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, (pageNo-1)*pageSize);
			pstmt.setInt(2, pageSize);			
			ResultSet rs = pstmt.executeQuery();
			while(rs.next()){
				Emp emp = new Emp();
				emp.setEmpno(rs.getInt(1));
				emp.setEname(rs.getString(2));
				emp.setJob(rs.getString("job"));
				emp.setHiredate(rs.getDate("hiredate"));
				emp.setSal(rs.getDouble("sal"));
				list.add(emp);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
}
创建Emp实体类
package com.qf.bean;

import java.util.Date;

public class Emp {
	private int empno;
	private String ename;
	private String job;
	private int mgr;
	private Date hiredate;
	private double sal;
	private double comm;
	private int deptno;
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public int getMgr() {
		return mgr;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}
	public Date getHiredate() {
		return hiredate;
	}
	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}
	public double getSal() {
		return sal;
	}
	public void setSal(double sal) {
		this.sal = sal;
	}
	public double getComm() {
		return comm;
	}
	public void setComm(double comm) {
		this.comm = comm;
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	@Override
	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate=" + hiredate
				+ ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]";
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值