简单分页查询(web基础学习笔记十三)
一、建立资源文件和工具类
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 %>条记录 <%=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基础学习笔记十三)的更多相关文章
- JDBC二查询(web基础学习笔记八)
一.建立数据库 --创建news表空间 CREATE TABLESPACE tbs_news DATAFILE 'F:\ORACLE\news.dbf' SIZE 10M AUTOEXTEND ON; ...
- 监听器(web基础学习笔记二十二)
一.监听器 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门 ...
- EL运算符(web基础学习笔记十七)
一.EL语法 1.1.语法结构 ${expression} 1.2.[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一 ...
- Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar
正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...
- JavaBean(web基础学习笔记十二)
一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...
- JSP实现数据传递(web基础学习笔记三)
get和post的区别: JSP内置对象: 1)out内置对象:out内置对象是在JSP开发过程中使用得最为频繁的对象,然而其使用起来也是最简单的.out对象用于向客户端浏览器输出数 ...
- 过滤器(web基础学习笔记二十一)
一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResp ...
- Servlet一(web基础学习笔记二十)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- JSTL 标签库 使用(web基础学习笔记十九)
标签库概要: 一.C标签库介绍 1.1.<c:> 核心标签库 JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:1.表达式控制标签:out.set.remove.catch2 ...
随机推荐
- 【scrapy】使用方法概要(四)(转)
[请初学者作为参考,不建议高手看这个浪费时间] 上一篇文章,我们抓取到了一大批代理ip,本篇文章介绍如何实现downloaderMiddleware,达到随即使用代理ip对目标网站进行抓取的. 抓取的 ...
- Red Hat Enterprise Linux 7.4上安装Oracle 11.2.0.4
1. 配置Yum源及关闭SeLinux [root@localhost ~]# mkdir /media/rhel [root@localhost ~]# mount /dev/cdrom /medi ...
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
[一步是咫尺,一步即天涯] 经过前文的叙述,各位看官是不是已经被Mybatis的强大功能给折服了呢?本文我们将介绍一个能够极大提升我们开发效率的插件:即代码自动生成.这里的代码自动生成包括,与数据库一 ...
- latch lock pin mutex
http://blog.163.com/liaoxiangui@126/blog/static/79569640201310773821804/ http://www.cnblogs.com/eric ...
- 转 Objective-C中不同方式实现锁(一)
为什么需要使用锁,当然熟悉多线程的你,自然不会对它觉得陌生. 那你在代码中是否很好的使用了锁的机制呢?你又知道几种实现锁的方法呢? 今天一起来探讨一下Objective-C中几种不同方式实现的锁,在这 ...
- Java获取电脑IP、MAC、各种版本
Java代码获取电脑IP.MAC.各种版本 package com.rapoo.middle.action; import java.io.BufferedReader; import java.io ...
- QT vs x64编译
下载qt-everywhere-opensource-src-5.3.0 这个设置非常重要,不对的话,一大堆编译错误,已经折腾了好多回了 configure -mp -confirm-license ...
- Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
CFLAGS 表示用于C编译器的选项 CXXFLAGS 表示用于C++编译器的选项 这两个变量实际上涵盖了编译和汇编的两个步骤 CFLAGS:指定头文件(.h)的路径,如:CFLAGS=-I/usr/ ...
- 学习笔记:状态压缩DP
我们知道,用DP解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态.但是有这样的一些题 目,它们具有DP问题的特性,但是状态中所包含的信息过多,如果要用数组来保存状态的话需要 ...
- SpringMVC处理方法的数据绑定
一.SpringMVC数据绑定流程 Spring MVC通过反射机制对目标处理方法的签名进行解析,将请求消息中的信息以一定的方式转换并绑定到处理方法的入参中.数据绑定的核心部件是DataBinder, ...