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

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. BZOJ 1029: [JSOI2007]建筑抢修 优先队列

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  2. ClassifyHandler 分类处理结构

      public class ClassifyHandler { public object vTrue { get; set; } public object vFalse { get; set; ...

  3. oracle开发学习篇之集合函数

    集合函数; declare type list_nested ) not null; v_all list_nested := list_nested('changan','hubei','shang ...

  4. oracle监听理解 命名理解

    一.监听器是oracle基于服务器端的一种网络服务,主要作用是监听客户端的连接请求,并将请求转发给服务器. 监听器基于端口的,每个监听器会占用一个端口.默认监听端口1521. oracle家目录下的n ...

  5. 精简高效CSS系列之二——浮动float

    一.浮动基础知识 假如一个页面上有3个div块,如下排列: 图1:不使用浮动 图2:向右浮动 图2说明了框1脱离了文档流向右移动,直到它的右边缘碰到包含框的右边缘为止. 图3:向左浮动 图3说明了框1 ...

  6. Node.js modules you should know about: request

    Hey everyone! This is the fourth post in my new node.js modules you should know about article series ...

  7. OpenCV 机器学习之 支持向量机的使用方法实例

    用支持向量机进行文理科生的分类,根据的特征主要是 数学成绩与语文成绩,这两个特征都服从高斯分布 程序代码例如以下: 分类结果:

  8. log4j用properties文件配置,无法应用过滤器的解决方法

    properties文件仍然有错误 log4j:WARN Failed to set property [filter] to value "org.apache.log4j.varia.L ...

  9. 2. python 字符串常量

    2. python 字符串常量 1.单双引号字符串是一样的 >>> 'abc',"abc"    ('abc', 'abc')    >>> 当 ...

  10. 文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write

    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write close(关闭文件) 相关函数 ope ...