程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 使用JDBC連接MySQL數據庫--典型案例分析(八)----實現員工數據的分頁查詢

使用JDBC連接MySQL數據庫--典型案例分析(八)----實現員工數據的分頁查詢

編輯:MySQL綜合教程

使用JDBC連接MySQL數據庫--典型案例分析(八)----實現員工數據的分頁查詢


問題

使用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沒錯,和預期一樣。然後輸出結果也一致。

本節結束。。。。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved