一、建立资源文件和工具类

1.1 、database.properties

jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.connection.username=scott
jdbc.connection.password=tiger

1.2、建立包:com.pb.emp.untily

ConfigManager类

package com.pb.emp.untily;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; public class ConfigManager {
private static ConfigManager configManager;
private static Properties properties; private ConfigManager(){
String configfile="database.properties";
properties=new Properties();
InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configfile);
try {
properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ConfigManager getInstance(){
if(configManager==null){
configManager=new ConfigManager();
}
return configManager; }
public static String getString(String key){
return properties.getProperty(key);
} }

1.3、建立员工实体类

package com.pb.emp.entity;

import java.util.Date;
/**
* 员工实体类
* @author 森林森
*
*/
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; //getter和setter方法
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;
} }

二、建立BaseDao基类

2.1、建立基类

package com.pb.emp.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.pb.emp.untily.ConfigManager; public class BaseDao {
protected Connection conn;
protected PreparedStatement ps;
protected ResultSet rs; //建立连接
public boolean getConnection(){
String driver=ConfigManager.getInstance().getString("jdbc.driver_class");
String url=ConfigManager.getInstance().getString("jdbc.connection.url");
String username=ConfigManager.getInstance().getString("jdbc.connection.username");
String password=ConfigManager.getInstance().getString("jdbc.connection.password"); try {
Class.forName(driver);
conn=DriverManager.getConnection(url,username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
} //增加,修改,删除
public int executeUpdate(String sql, Object[] params){
getConnection();
int updateRow=0;
try {
ps=conn.prepareStatement(sql);
//填充占位符
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
updateRow = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return updateRow;
}
//
//查询
public ResultSet executeSQL(String sql, Object[] params){
getConnection(); try {
ps=conn.prepareStatement(sql);
//填充占位符
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
rs = ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
} // 关闭资源
public boolean closeResource() {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
} if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
return true;
}
}

2.2、建立分页类

package com.pb.emp.untily;

public class Page {
private int currPageNo=1; //当前页号
private int pageSize=0; //每页显示的记录数
private int recordCount=0; //总记录数
private int totalPageCount=1; //总页数 public int getCurrPageNo() {
//条中不能加this
if(totalPageCount==0)
return 0;
return currPageNo;
}
public void setCurrPageNo(int currPageNo) {
if(currPageNo>0)
this.currPageNo = currPageNo;
} public void setPageSize(int pageSize) {
//条中不能加this
if(pageSize>0)
this.pageSize = pageSize;
}
public int getPageSize() {
return pageSize;
} public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getRecordCount() {
return recordCount;
} public void setRecordCount(int recordCount) {
//条中不能加this
if(recordCount>0)
this.recordCount = recordCount;
//调用总页数设置方法为totalPageCount赋值
//this.settotalPageCountByRs();
} //设置总页数
public int settotalPageCountByRs(){
if(this.recordCount%this.pageSize==0){
this.totalPageCount=this.recordCount/this.pageSize;
}else if(this.recordCount%this.pageSize>0){
this.totalPageCount=this.recordCount/this.pageSize+1;
}else{
this.totalPageCount=0;
}
return this.totalPageCount;
}
//开始记录数
public int getStartRow(){
return (currPageNo-1) * pageSize+1;
}
//结束记录数
public int getEndRow(){
return currPageNo * pageSize;
}
public static void main(String[] args) {
Page p=new Page();
p.setCurrPageNo(2);
System.out.println(p.getCurrPageNo());
p.setPageSize(3);
System.out.println(p.getPageSize());
int i=p.getStartRow();
System.out.println("启始记录"+i);
int j=p.getEndRow();
System.out.println("结束记录"+j);
}
}

三、建立分页查询的实现类

3.1、实现类

package com.pb.emp.dao.empl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import com.pb.emp.dao.BaseDao;
import com.pb.emp.dao.EmpDao;
import com.pb.emp.entity.Emp;
import com.pb.emp.untily.Page; public class EmpDaoImpl extends BaseDao implements EmpDao { /**
* 获取新闻总数量
* */
public int getTotalCount() {
int totalCount=0;
String sql="select count(*) from emp";
Object[] params={};
rs=this.executeSQL(sql, params);
try {
while(rs.next()){
totalCount=rs.getInt(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeResource();
}
return totalCount;
} /**
* 分页获取新闻信息
* */
public List<Emp> getEmpByPage(int pageNo, int pageSize) {
// 建立集合存放查询结果
List<Emp> emplist = new ArrayList<Emp>();
String sql = "SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM(SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno,ROWNUM rn FROM emp) e WHERE e.rn BETWEEN ? AND ?";
Page pages=new Page();
//设置当前页和页显示显示记录数
pages.setCurrPageNo(pageNo); //设置当前页码
pages.setPageSize(pageSize); //每页显示记录数
//计算开始和结束记录数
int startRow = pages.getStartRow();
int endRow = pages.getEndRow();
//填充占位符?
Object [] params={startRow,endRow};
//调用类BaseDao的查询方法并接收结果
rs=this.executeSQL(sql, params);
try { while(rs.next()){
int empno=rs.getInt("empno");
String ename=rs.getString("ename");
String job=rs.getString("job");
int mgr=rs.getInt("mgr");
Date hiredate=rs.getDate("hiredate");
double sal=rs.getDouble("sal");
double comm=rs.getDouble("comm");
int deptno=rs.getInt("deptno");
//声明Emp对象
Emp emp=new Emp();
//将得到的值添加到对象中
emp.setEmpno(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setMgr(mgr);
emp.setHiredate(hiredate);
emp.setSal(sal);
emp.setComm(comm);
emp.setDeptno(deptno);
//将对象添加到集合
emplist.add(emp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.closeResource();
}
return emplist; }
public static void main(String[] args) {
EmpDaoImpl e=new EmpDaoImpl();
System.out.println(e.getTotalCount());
List<Emp> emplist=e.getEmpByPage(2, 3);
System.out.println("=====员工信息====");
for (Emp emp : emplist) {
System.out.println(emp.getSal()+"\t"+emp.getComm()+"\t"+emp.getDeptno() );
}
} }

3.2、分离出接口

package com.pb.emp.dao;

import java.util.List;

import com.pb.emp.entity.Emp;

public interface EmpDao {
/**
* 获取新闻总数量
* */
public int getTotalCount(); public List<Emp> getEmpByPage(int pageNo, int pageSize);
}

3.3、分享出service接口和实现类

package com.pb.service;

import java.util.List;

import com.pb.emp.entity.Emp;

public interface Service {

    public List<Emp> getEmpByPage(int pageNo, int pageSize);

    public int getTotalCount();
}
package com.pb.service.impl;

import java.util.List;

import com.pb.emp.dao.EmpDao;
import com.pb.emp.entity.Emp;
import com.pb.service.Service; public class ServiceImpl implements Service {
private EmpDao empDao; /**
* 一定要加setter和getter方法,不然无法调用
* @森林森
*/
public EmpDao getEmpDao() {
return empDao;
} public void setEmpDao(EmpDao empDao) {
this.empDao = empDao;
} @Override
public List<Emp> getEmpByPage(int pageNo, int pageSize) { return empDao.getEmpByPage(pageNo, pageSize);
} @Override
public int getTotalCount() {
// TODO Auto-generated method stub
return empDao.getTotalCount();
} }

四、建立页面

4.1导入service类

建立common.jsp页面

<jsp:useBean id="empService" class="com.pb.service.impl.ServiceImpl" scope="page"></jsp:useBean>
<jsp:useBean id="empDao" class="com.pb.emp.dao.empl.EmpDaoImpl" scope="page"></jsp:useBean>
<jsp:setProperty property="empDao" name="empService" value="<%=empDao%>" />

4.2 实现页面get方式

<%@page import="com.pb.emp.untily.Page"%>
<%@page import="com.pb.emp.entity.Emp"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="../common/common.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function go(){
var goid=document.getElementById("goid").value;
var regexp=/^\d+$/;
if(!regexp.test(goid)){
alert("请输入数字");
}else{
window.location="emp.jsp?pageIndex="+goid;
}
}
</script>
</head>
<body> <table border="1" width="80%" align="center"> <tr>
<td>员工编号</td>
<td>员工姓名</td>
<td>职位</td>
<td>入职日期</td>
<td>工资</td>
<td>奖金</td>
<td>部门编号</td>
</tr> <%
request.setCharacterEncoding("utf-8");
int pageSize=5;
String currPageno=request.getParameter("pageIndex");
if(currPageno==null){
currPageno="1";
}
//当前页
int pageNo=Integer.parseInt(currPageno);
//总记录娄
int recordCount=empService.getTotalCount();
//每页显示记录数 Page pages=new Page();
//当前页
pages.setCurrPageNo(pageNo);
//页面显示多少条记录
pages.setPageSize(pageSize);
//总记录数
pages.setRecordCount(recordCount);
//总页数
int totalPageCount=pages.settotalPageCountByRs();
//对首面和最后一面设置不重小于1和大于最后一页
if(pageNo<1){
pageNo=1;
}else if (pageNo>totalPageCount){
pageNo=totalPageCount;
} List<Emp> emplist=empService.getEmpByPage(pageNo, pageSize);
for(Emp emp:emplist){
%>
<tr>
<td><%=emp.getEmpno() %></td>
<td><%=emp.getEname() %></td>
<td><%=emp.getJob() %></td>
<td><%=emp.getHiredate() %></td>
<td><%=emp.getSal() %></td>
<td><%=emp.getComm() %></td>
<td><%=emp.getDeptno() %></td>
</tr>
<%
}
%>
<tr>
<td>共<%=recordCount %>条记录&nbsp;&nbsp; <%=pageNo %>/<%=totalPageCount %>页</td>
<% //控制首页的显示
if(pageNo>1){
%>
<td><a href="emp.jsp?pageIndex=1">首页</a></td>
<td><a href="emp.jsp?pageIndex=<%=pageNo-1%>">上一页</a></td>
<%
}
if(pageNo<totalPageCount){
//控制最后一页的显示
%>
<td><a href="emp.jsp?pageIndex=<%=pageNo+1%>">下一页</a></td>
<td><a href="emp.jsp?pageIndex=<%=totalPageCount%>">最后一页</a></td>
<%
}
%>
<td><input type="text" id="goid" name="goid"> </td>
<td><a href="javascript:go();">GO</a></td>
</tr> </table> </body>
</html>

4.3 实现页面Post方式

小弟没持明白,搞明白了再写

简单分页查询(web基础学习笔记十三)的更多相关文章

  1. JDBC二查询(web基础学习笔记八)

    一.建立数据库 --创建news表空间 CREATE TABLESPACE tbs_news DATAFILE 'F:\ORACLE\news.dbf' SIZE 10M AUTOEXTEND ON; ...

  2. 监听器(web基础学习笔记二十二)

    一.监听器 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门 ...

  3. EL运算符(web基础学习笔记十七)

    一.EL语法 1.1.语法结构 ${expression} 1.2.[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一 ...

  4. Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar

    正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...

  5. JavaBean(web基础学习笔记十二)

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...

  6. JSP实现数据传递(web基础学习笔记三)

    get和post的区别: JSP内置对象: 1)out内置对象:out内置对象是在JSP开发过程中使用得最为频繁的对象,然而其使用起来也是最简单的.out对象用于向客户端浏览器输出数         ...

  7. 过滤器(web基础学习笔记二十一)

    一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResp ...

  8. Servlet一(web基础学习笔记二十)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  9. JSTL 标签库 使用(web基础学习笔记十九)

    标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库  JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2 ...

随机推荐

  1. 基于Landmark的人脸对齐以及裁剪方法

    利用Landmarks进行人脸对齐裁剪是人脸检测中重要的一个步骤.效果如下图所示: 基本思路为: a.人脸检测 人脸的检测不必多说了,基本Cascade的方式已经很不错了,或者用基于HOG/FHOG的 ...

  2. HDU 3487 Play with Chain (splay tree)

    Play with Chain Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  3. Android 上SuperUser获取ROOT权限原理解析

    Android 上SuperUser获取ROOT权限原理解析 一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. ...

  4. Towelroot v3.0版发布 将支持更多设备 Towelroot v3.0下载

    Towelroot虽然已经发布一段时间了,虽然所Towelroot可以一键ROOT很多设备,虽然它只有100多K.不过还是有一小部分的机型没办法ROOT成功的,也不知道什么原因.不过不用担心,Geoh ...

  5. redhat server 5.3内核升极2.6.18 升级到 3.5 装systemtap 原创

    1. 在 LINUX 3.5源代码目录下执行  yum install ncurses-devel     make menuconfig 2  打开内核跟踪事件,用于SYSTEMTAP跟踪 kern ...

  6. OllyDbg 使用笔记 (十二)

    OllyDbg 使用笔记 (十二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1eQiV6aI 安装好程序 ...

  7. .Net高级技术——结构体

    结构体 结构体和类的区别:结构体是值类型,类是引用类型 结构体非常类似于类,但是值类型(拷贝传递),不能被继承 Int32.DateTime等都是结构体,从ValueType继承,值类型. 结构体测试 ...

  8. python性能优化建议

    参考: https://segmentfault.com/a/1190000000666603 http://blog.csdn.net/zhoudaxia/article/details/23853 ...

  9. 相比xib 使用代码编排view 的一个明显的好处就是可以更好地重复使用已有代码,减少代码冗余。

    相比xib 使用代码编排view 的一个明显的好处就是可以更好地重复使用已有代码,减少代码冗余.

  10. Kali Linux下安装配置ProFTPD实例

    1.安装ProFTPD 在ftp://ftp.proftpd.org/下能够找到官方公布的各个ProFTPD版本号,本人使用ftp://ftp.proftpd.org/historic/source/ ...