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

转载请注明: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表中数据的分页查询,代码如下所示:

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没错,和预期一样。然后输出结果也一致。

本节结束。。。。

时间: 06-16

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

使用JDBC连接MySQL数据库--典型案例分析(六)----实现账户转账操作

转载请注明:http://blog.csdn.net/uniquewonderq 问题:使用JDBC连接数据库,实现帐号转账业务.从A账户转账为B账户500元 方案: 本案例中,要实现转账业务,需要执行两次更新操作,一是更新A账户的金额为在原有的金额基础上减去500元: 二是更新B账户的金额为在原有金额的基础上增加500元.这两次更新操作要么全部成功,要么全部失败(事务),来表示转账的成功或失败.如果A账户的金额更新为原来金额基础上减去500元,而B账户去没有在原有金额基础上增加500元,这样就

使用JDBC连接MySQL数据库--典型案例分析(三)----使用Apach DBCP连接池d

问题: 本案例要求使用Apach DBCP 连接数据池重构类DBUtility 为ConnectionSource类,并重构案例"实现DBUtility",提供连接的获取,关闭功能的"中的EmpDAO类,在该类中使用ConnectionSource来获取连接. 方案: 直接使用JDBC访问数据库时,需要避免一下隐患: 1.每一次数据操作请求都是需要建立数据库连接,打开连接,存取数据和关闭数据等步骤.而建立和打开数据库是一件既耗资源有费时间的过程,如果频繁发生这样的数据库操作,

使用JDBC连接MySQL数据库--典型案例分析(九)----财务帐号的DAO设计及其实现

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 1.新增财务帐号: 2.修改某个财务帐号的信息. 3.修改某个财务帐号的状态. 4.查询所有的财务帐号. 5.根据某个财务帐号ID查询该财务帐号的全部信息. 方案: 在企业开发时,通常采用分层模式,常用的层次划分为表现层+控制层+业务层+持久层+数据源.持久层的功能是通过某些技术货框架将数据库的内容映射成对象,通过操作这些对象实现对数据库的操作.其主要目的是minutes业务对象和数据源那关系表之间的差异,

(详细)JAVA使用JDBC连接MySQL数据库(1)- 软件

欢迎任何形式的转载,但请务必注明出处. 1.jdk 点击查看安装和环境配置教程 2.Eclipse 点击进入官网下载 注意下载完成打开.exe后,出现下图界面,有很多版本供选择 本人目前在学JSP所以安装的是Java EE版本,初学者可以选择第一个Java Developers版本 3.Mysql 点击进入官网下载 点击进入推荐安装教程+环境配置 下载页面注意事项 (虽然选项只有32位的,但下载完成后32位和64位都会安装) (上面的是在线安装,下面的是离线安装,建议选择离线安装) 系列文章 (

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

JDBC连接MySQL数据库及演示样例

JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一訪问,它由一组用Java语言编写的类和接口组成.JDBC为数据库开发者提供了一个标准的API,据此能够构建更高级的工具和接口,使数据库开发者能够用纯 Java API 编写数据库应用程序,而且可跨平台执行,而且不受数据库供应商的限制.

JAVA使用JDBC连接MySQL数据库 二(2)

本文是对 <JAVA使用JDBC连接MySQL数据库 二>的改进. 上节使用的是PreparedStatement来执行数据库语句,但是preparedStatement需要传递一个sql语句参数,才能创建.然而,DBHelper类只是起到打开和关闭数据库的作用,所以sql语句是要放到应用层部分的,而不是放到DBHelper类中. 而statment不需要传递一个sql语句参数,就能创建. 修改部分如下: public class DBHelper { String driver = &quo

jdbc 连接mysql数据库

jdbc驱动到官网下载,放在jdk的相关目录下面,或者jar文件加入到工程下面 package test_mysql; import java.sql.*; import java.util.Set; public class testjdbc { public static Connection getConnection() throws ClassNotFoundException, SQLException{ String URL="jdbc:mysql://localhost:3306

Crystal Reports 2008(水晶报表) JDBC连接mysql数据库

在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用的相关jar包. 接下来,就可以进行数据库的一些连接操作了. 对JDBC不是很了解的,可以到 完整java开发中JDBC连接数据库代码和步骤 了解相关的操作 1.打开Crystal Reports的数据专家 2.点击JDBC(JNDI)出现: 3.输入url和数据库类名,点击下一步: 4.输入pas