前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

作者头像
MickyInvQ
发布于 2020-09-27 07:07:22
发布于 2020-09-27 07:07:22
1.2K00
代码可运行
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏
运行总次数:0
代码可运行

转载请注明:http://blog.csdn.net/uniquewonderq

问题

使用JDBC连接Mysql数据库,实现对Emp表数据的分页查询功能。

方案

对于较大的数据量,通常采用分页查询的方式。不同的数据库产品有不同的数据库级的分页查询策略。例如:Oracle通常使用rownum的方式;而Mysql使用limit的方式。

Oracle采用rownum和子查询实现分页查询,SQL语句如下,

select * from (select rownum rn,empno,ename,job,mgr,hiredate,sal,comm,deptno from (select * fron emp order by empno))where rn between 6 and 10

上述SQL语句的功能为按照员工编号升序员工信息,获取排序后第6到10 位之间的5条员工信息。

实现上述功能的MySQL数据库的SQL语句如下:

select * from emp order by empno limit 5,5;

MYSQL中使用limit关键字实现分页查询。其中,limit后第一个参数为开始获取数据的行号(从0开始),第二个参数为获取记录的行数。第二个参数可省略,表示从第一个参数开始,获取后续所有记录。

步骤

实现此案例需要按照如下步骤进行。

步骤:添加方法findByPageMySQL方法,实现连接Mysql数据库,实现对Emp表中数据的分页查询,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;

import com.sun.org.apache.regexp.internal.recompile;

import Entity.Emp;
public class EmpDAO {
	public static void main(String [] args){
		EmpDAO dao=new EmpDAO();
		//1.select all
		//dao.findAll();
		//2.insert
		//Emp emp=new Emp(1001,"rose","Analyst",7901,"2014-05-01",3000.00,500.00,10);
		//System.out.println("emp.getEmpNo()"+emp.getEmpNo());
		//dao.add(emp);
		//3.update
		//emp.setSal(4500.00);
		//dao.update(emp);
		//4.findByPageMysql
		dao.findByPageMySQL(2, 3);//查看第二页,每页3条
	}
	public void findByPageMySQL(int page,int pageSize){
		Connection con=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		int total=-1;//总记录数
		int pages=-1;//总页数
		String sql_total="select count(*) from emp";
		String sql="select * from emp order by empno limit ?,?";
		try {
			con=ConnectionSource.getConnection();
			stmt=con.prepareStatement(sql_total);
			//获得总的记录数
			rs=stmt.executeQuery();
			if(rs.next()){
				total=rs.getInt(1);
			}
			System.out.println("总记录数为:"+total);
			//计算总共多少页
			int mod=total%pageSize;
			if(mod==0){
				pages=total/pageSize;
			}
			else pages=total/pageSize +1;
			//如果要查看的页数大于最大页,或者小于1,则取最后一页或第一页
			if(page>pages){
				page=pages;
			}else if(page<1){
				page=1;
			}
			System.out.println("sql语句为:"+sql);
			int start=(page-1)*pageSize;
			stmt=con.prepareStatement(sql);
			stmt.setInt(1, start);
			stmt.setInt(2, pageSize);
			rs=stmt.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt("empno")+","+rs.getString("ename")+","+rs.getDouble("sal")+","+rs.getDate("hiredate"));
			}
		} catch (SQLException e) {
			System.out.println("数据库访问异常!");
			throw new RuntimeException(e);
		}finally{
			try {
				if(stmt!=null){
					stmt.close();
				}
				if(con!=null){
					con.close();
				}
			} catch (SQLException e) {
				System.out.println("释放资源时发生异常!");
			}
		}
	}
	
	public void findAll(){
		Connection con=null;
		Statement stmt=null;
		ResultSet rs=null;
		
		try {
			con=ConnectionSource.getConnection();
			stmt=con.createStatement();
			rs=stmt.executeQuery("select empno,ename,sal,hiredate from emp;");
			while(rs.next()){
				System.out.println(rs.getInt("empno")+","+rs.getString("ename")+","+rs.getDouble("sal")+","+rs.getDate("hiredate"));
			}
		} catch (SQLException e) {
			System.out.println("数据库访问异常!");
			throw new RuntimeException(e);
		}
		finally{
			try {
				if(rs!=null){
						rs.close();
					}
					if(stmt!=null){
						stmt.close();
					}
					if(con!=null){
						con.close();
					}
			} catch (SQLException e) {
				System.out.println("释放资源时发生异常!");
			}
		}
	}

	public void add(Emp emp){
		Connection con=null;
		Statement stmt=null;
		int flag=-1;
		String sql="insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values("+emp.getEmpNo()+","+"'"+emp.getEname()+"',"+"'"+emp.getJob()+"',"+emp.getMgr()+","+"str_to_date('"+emp.getHiredate()+"','%Y-%m-%d %H:%i:%s'),"+emp.getSal()+","+emp.getComm()+","+emp.getDeptno()+")";
		try {
			con=ConnectionSource.getConnection();
			stmt=con.createStatement();
			flag =stmt.executeUpdate(sql);
	//Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing,
	//such as an SQL DDL statement.
	//either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0
	//for SQL statements that return nothing
	//这个flag返回有两种情况:1.返回执行完的行数
	//如果是DDL语句那么什么都不返回。
	//DDL语句:Data Definition Language
	//比如:CREATE DATABASE,CREATE TABLE,ALTER TABLE ,DROP TABLE,CREATE VIEW,ALTER VIEW ,DROP VIEW 等
			if(flag>0){
				System.out.println("新增记录成功!");
			}
		} catch (SQLException e) {
			System.out.println("数据库访问异常!");
			throw new RuntimeException(e);
		}
		finally{
			try {
				if(stmt!=null){
					stmt.close();
				}
				if(con!=null){
					con.close();
				}
			} catch (SQLException e2) {
				System.out.println("释放资源发生异常!");
			}
		}
	}

	public void update(Emp emp){
		Connection con=null;
		Statement stmt=null;
		int flag=-1;
		String sql="update emp set sal="+emp.getSal()+","+"comm="+emp.getComm()+"where empno="+emp.getEmpNo();
		try {
			con=ConnectionSource.getConnection();
			stmt=con.createStatement();
			flag=stmt.executeUpdate(sql);
			if(flag>0){
				System.out.println("更新记录成功!");
			}
		} catch (SQLException e) {
			System.out.println("数据库访问异常!");
			throw new RuntimeException(e);
		}finally{
			try {
				if(stmt!=null){
					stmt.close();
				}
				if(con!=null){
					con.close();
				}
			} catch (SQLException e2) {
				System.out.println("释放资源发生异常!");
			}
		}
	}
}

执行上述代码:

由表可看出:第三条是7499

运行结果:

总记录数为11没错,和预期一样。然后输出结果也一致。

本节结束。。。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/06/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用JDBC连接MySQL数据库--典型案例分析(七)----批量插入员工信息
向Emp表中批量插入100条数据,需要插入数据的列为empno,ename以及sal.这三个字段对应的数据分别为empno列的数据通过序列emp_seq自动生成,ename列的数据为字符串 "name"+循环次数i组成、sal的数据有随机生成的10000以内的整数构成。
MickyInvQ
2020/09/27
9160
使用JDBC连接MySQL数据库--典型案例分析(七)----批量插入员工信息
JDBC小项目—员工管理系统
此界面系统由Java代码编写,没有上升到软件层面,简单易学。 本项目使用的是Oracle数据库中的scott用户下emp表 项目结构截图: 项目结果截图: 具体步骤: 1、使用上次已经次练习已经
时间静止不是简史
2020/07/27
1.2K0
JDBC小项目—员工管理系统
Java jdbc Mysql数据库连接
jdbc数据库连接六步走 1. 注册驱动 注册驱动的两种方法 Class.forName("com.mysql.cj.jdbc.Driver"); //mysql8.+版本 Driver driver = new com.mysql.cj.jdbc.Driver(); DriverManager.registerDriver(driver); 2.获取连接 String url = "jdbc:mysql://127.0.0.1:3306/tests"; String user = "root"; Str
吃猫的鱼Code
2023/02/02
4.2K0
MySQL数据库(良心资料)
我们所说的数据库泛指“关系型数据库管理系统(RDBMS-Relational database management system)”,即“数据库服务器”。
阮键
2019/09/29
1.4K0
大数据必学Java基础(一百):员工管理系统开发
​员工管理系统开发一、DAO接口package com.lanson.dao;import com.lanson.pojo.Emp;import java.util.List;/** * @Author: Lansonli * @Description: MircoMessage:Mark_7001 */public interface EmpDao { /** * 向数据库Emp表中增加一条数据的方法 * @param emp 要增加的数据封装成的Emp类的对象 * @ret
Lansonli
2022/12/16
6520
大数据必学Java基础(一百):员工管理系统开发
Java连接MySQL数据库
这里贴出代码,以供查看! import java.sql.*; public class JDBCDemo { public static void main(String[] args) { String user = "root";//用户名 String password = "****";//密码 String url = "jdbc:mysql://localhost:3306/student";//数据库名 String driver = "com.mysql.jdb
卡尔曼和玻尔兹曼谁曼
2019/01/25
22K0
java连接mysql数据库的步骤(访问数据库的步骤)
​ 安装mysql数据库配置(https://www.jianshu.com/p/ea4accd7afb4),安装还有配置教程,按照步骤来肯定没错,里面是win10的mysql解压版安装教程,设置账号密码是一定要注意 :账号一般为root,密码一般为 123456 ,如果你要更改的话一定要记住,因为后面连接需要用到(切记),如果忘了会很麻烦。
全栈程序员站长
2022/07/30
6.4K0
java连接mysql数据库的步骤(访问数据库的步骤)
MySQL的JDBC连接
JDBC 是 Java Database Connective的缩写,表示使用Java去连接数据库进行数据操作的过程
全栈程序员站长
2022/09/09
3.3K0
使用jdbc连接mysql数据库_mysql允许远程连接
JDBC(Java Database Connectivity,Java数据库连接)是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 本文讲述如何使用 JDBC 来连接和访问数据库。
全栈程序员站长
2022/10/03
30.9K0
使用jdbc连接mysql数据库_mysql允许远程连接
大数据必学Java基础(九十三):JDBC完成CURD
作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。关闭Statement对象和Connection对象的语法形式为:用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭。
Lansonli
2022/12/15
3320
大数据必学Java基础(九十三):JDBC完成CURD
2019面试题:谈谈对JDBC的理解(最简洁!)
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API(Application Programming Interface),可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
葆宁
2019/04/18
1K0
2019面试题:谈谈对JDBC的理解(最简洁!)
Spring JDBC
在掌握了Spring容器的基础知识之后,我们要把它们应用到实际的程序之中。一个很好的起点是针对几乎所有企业程序都存在的需求:数据访问。几乎所有程序员都曾经处理过数据库访问,也都知道使用传统的JDBC进行数据访问具有一些缺陷。接下来我们将要学习Spring是如何改善数据访问过程中存在的缺陷的。
用户9184480
2024/12/17
1180
Spring JDBC
ssm整合之五 分页以及按时间查询
<select id="getpage" parameterType="java.util.Map" resultType="net.bean.emp">
用户9184480
2024/12/17
530
ssm整合之五 分页以及按时间查询
JDK1.9-JDBC连接池
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/10
4020
Mybatis分页查询(通过SQL分页实现)[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140939.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
3.2K0
Mybatis分页查询(通过SQL分页实现)[通俗易懂]
JDBC常见操作总结
JDBC-Query Java连接数据库,并执行查询操作具体步骤如下(需要注意的是要导入相关的包): 1、声明连接参数 2、注册驱动 3、利用驱动管理器,建立连接 4、定义sql语句 5、创建发送器(statement、prestatement) 6、执行sql语句(ResultSet) 7、处理结果集 8、关闭相关对象 package cn.bjsxt.jdbc; import java.sql.Connection; import java.sql
时间静止不是简史
2020/07/24
3600
JDBC连接池&JDBCTemplate课堂笔记
用户9184480
2024/12/19
960
JDBC连接PostgreSQL数据库的若干问题
首先说一个我在创建数据库的时候遇到的一个问题:PostgreSQL在创建数据表的时候,我想创建一个User表,但是PLSQL命令提示符提示有错,我后来改成userinfo就好了,我上网查了查要是给User加上引号也可以,即 CREATE TABLE "USER" ();
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.8K0
原生数据库操作JDBC
1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库 * JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
不愿意做鱼的小鲸鱼
2022/09/24
6550
原生数据库操作JDBC
Java对MySQL数据库进行连接、查询和修改
http://www.cnblogs.com/aniuer/archive/2012/09/10/2679241.html
bear_fish
2018/09/19
1.3K0
Java对MySQL数据库进行连接、查询和修改
相关推荐
使用JDBC连接MySQL数据库--典型案例分析(七)----批量插入员工信息
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验