在servlet中如何分页显示表中查询的数据
- 格式:doc
- 大小:30.50 KB
- 文档页数:6
SQLserver分页的4种⽅法⽰例(很全⾯)这篇博客讲的是SQL server的分页⽅法,⽤的SQL server 2012版本。
下⾯都⽤pageIndex表⽰页数,pageSize表⽰⼀页包含的记录。
并且下⾯涉及到具体例⼦的,设定查询第2页,每页含10条记录。
⾸先说⼀下SQL server的分页与MySQL的分页的不同,mysql的分页直接是⽤limit (pageIndex-1),pageSize就可以完成,但是SQL server 并没有limit关键字,只有类似limit的top关键字。
所以分页起来⽐较⿇烦。
SQL server分页我所知道的就只有四种:三重循环;利⽤max(主键);利⽤row_number关键字,offset/fetch next关键字(是通过搜集⽹上的其他⼈的⽅法总结的,应该⽬前只有这四种⽅法的思路,其他⽅法都是基于此变形的)。
要查询的学⽣表的部分记录⽅法⼀:三重循环思路先取前20页,然后倒序,取倒序后前10条记录,这样就能得到分页所需要的数据,不过顺序反了,之后可以将再倒序回来,也可以不再排序了,直接交给前端排序。
还有⼀种⽅法也算是属于这种类型的,这⾥就不放代码出来了,只讲⼀下思路,就是先查询出前10条记录,然后⽤not in排除了这10条,再查询。
代码实现-- 设置执⾏时间开始,⽤来查看性能的set statistics time on ;-- 分页查询(通⽤型)select *from (select top pageSize *from (select top (pageIndex*pageSize) *from studentorder by sNo asc ) -- 其中⾥⾯这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_studentorder by sNo desc ) temp_orderorder by sNo asc-- 分页查询第2页,每页有10条记录select *from (select top 10 *from (select top 20 *from studentorder by sNo asc ) -- 其中⾥⾯这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
java分页实现原理Java分页实现原理在开发Web应用程序时,经常需要对大量数据进行分页展示,以提高用户体验和系统性能。
Java提供了多种方法来实现分页功能,本文将介绍一种常用的实现原理。
一、分页的概念和作用分页是将大量数据按照一定的规则分成若干页进行展示的一种技术。
在Web应用程序中,分页可以有效地减少单个页面的数据量,提高页面加载速度,同时也方便用户进行数据浏览和导航。
二、基本原理Java分页的基本原理是通过查询数据库获取数据,并根据每页显示的数量和当前页码来划分数据,然后将划分后的数据进行展示。
下面是具体的实现步骤:1. 获取总记录数:首先需要查询数据库获取数据的总记录数,以便计算总页数。
2. 计算总页数:根据总记录数和每页显示的数量,可以计算出总页数。
总页数 = 总记录数 / 每页显示的数量(向上取整)。
3. 获取当前页数据:根据当前页码和每页显示的数量,计算出数据的起始位置和结束位置,然后查询数据库获取当前页的数据。
4. 展示数据:将获取到的当前页数据进行展示,可以通过列表、表格等方式展示数据。
5. 分页导航:在页面底部显示分页导航条,包括首页、上一页、下一页、末页等按钮,用户可以通过点击按钮来切换页码。
6. 数据校验:在获取当前页数据之前,需要对页码进行校验,确保页码不超出总页数的范围。
三、关键代码示例下面是一个简单的Java代码示例,用于实现基本的分页功能:```java// 查询总记录数int totalRecords = dao.getTotalRecords();// 计算总页数int pageSize = 10; // 每页显示10条数据int totalPages = (int) Math.ceil((double) totalRecords / pageSize);// 校验页码int currentPage = 1; // 当前页码if (currentPage < 1) {currentPage = 1;} else if (currentPage > totalPages) {currentPage = totalPages;}// 计算起始位置和结束位置int startIndex = (currentPage - 1) * pageSize;int endIndex = startIndex + pageSize;// 查询当前页数据List<Data> dataList = dao.getDataList(startIndex, endIndex);// 展示数据for (Data data : dataList) {// 展示数据的代码}// 分页导航String navigation = generateNavigation(currentPage, totalPages);// 展示分页导航的代码```以上代码中,`dao`代表数据访问对象,`Data`代表数据实体类。
标题:Excel表格中多个分页提取部分数据的方法一、引言在日常工作中,我们经常会遇到需要在Excel表格中处理多个分页数据的情况。
而要提取其中的部分数据,往往需要一些技巧和方法。
本文将结合实际案例,介绍在Excel表格中提取多个分页中的部分数据的方法,并探讨其应用场景和实际应用中的注意事项。
二、前言在工作中,我们时常需要处理各种数据表,而这些数据往往以多个分页的形式存在于Excel表格中。
在这种情况下,要提取某一特定分页中的部分数据,需要使用Excel的高级功能和技巧。
接下来,我将结合我的工作经验,介绍在Excel表格中提取多个分页中的部分数据的方法,并共享一些个人观点和经验。
三、方法一:使用引用公式当我们需要在一个分页中提取另一个分页的特定数据时,可以使用Excel的引用公式。
具体步骤如下:1. 打开要提取数据的目标分页和源分页。
2. 在目标分页中选定要插入数据的单元格,然后输入“=”号。
3. 切换到源分页,并选定要引用的数据范围。
4. 确定数据范围后,按下回车键,Excel会自动将源分页中的数据引用到目标分页中。
这种方法适用于需要频繁更新的数据,如财务报表、销售数据等。
通过使用引用公式,我们可以轻松地在目标分页中提取源分页的特定数据,而且只要源分页中的数据更新,目标分页中的数据也会相应更新。
四、方法二:使用数据透视表数据透视表是Excel中非常强大的数据分析工具,可以帮助我们快速汇总和分析大量数据。
在处理多个分页数据时,我们可以使用数据透视表来提取特定分页中的部分数据。
具体步骤如下:1. 选择所有需要分析的数据范围,包括多个分页的数据。
2. 在Excel菜单栏中选择“插入”-“数据透视表”。
3. 在弹出的对话框中,选择要分析的数据范围,并设置需要提取数据的字段和条件。
4. 确定设置后,Excel会自动生成一个数据透视表,其中包含了我们需要的特定数据。
使用数据透视表,不仅可以轻松地提取特定分页中的部分数据,还可以进行数据分析和汇总。
数据在前端显⽰的分页技术1.实体⼯具类/*** 分页⼯具类.泛型类*/public class PageUtil<T> {//属性private int pageNumber;//总记录数private int pageCount;//总页数private int pageIndex;//当前页private int pageSize;//每页⼤⼩private List<T> list;//当前页的数据public int getPageNumber() {return pageNumber;}public int getPageCount() {return pageCount;}public int getPageIndex() {return pageIndex;}public int getPageSize() {return pageSize;}public List<T> getList() {return list;}public void setPageNumber(int pageNumber) {this.pageNumber = pageNumber;}public void setPageCount(int pageCount) {this.pageCount = pageCount;}public void setPageIndex(int pageIndex) {this.pageIndex = pageIndex;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public void setList(List<T> list) {this.list = list;}}2.分页显⽰controller// 分页显⽰列表@RequestMapping("list")public ModelAndView list(HttpServletRequest request, Model model,HttpSession session,@RequestParam(value="name",required=false) String name) { System.out.println("--------------------+"+name+"++------------------------");session.setAttribute("name", name);int pageIndex = 1;// 设置初始的当前页,页⾯显⽰的都是第⼀页int pageSize = 5;// 设置每⼀页显⽰⼏条数据,⽤于计算总页数,此处设置的值必须与sql语句的limit最后的数值⼀样System.out.println("员⼯列表");PageUtil<Member> pageUtil = new PageUtil<Member>();// 初始化⼯具类if (request.getParameter("pageIndex") != null) {pageIndex = Integer.parseInt(request.getParameter("pageIndex"));} // 对页⾯上的分页标签传的值,进⾏获取,也是就点击'上⼀页或者下⼀页'传过来的pageindexpageUtil.setPageIndex(pageIndex);// 保存⾄⼯具类,当前页数int number = memberBiz.getRowCount();// 调⽤service层⽅法计算出总数据量,就是多少条数据.//System.out.println("------------------------------"+number);pageUtil.setPageNumber(number);// 保存⾄⼯具类,总记录数pageUtil.setPageSize(pageSize);// 保存⾄⼯具类,⼀页⼏条pageUtil.setPageCount((int) Math.ceil((double) (pageUtil.getPageNumber() / pageUtil.getPageSize())) + 1);// 计算出总页数,并封装到⼯具类int index = (pageIndex - 1) * pageSize;// 计算出每⼀页从数据库中第⼏条数据开始取值,也就是limit后⾯的第⼀个数字List<Member> list = memberBiz.findAllMember(name, index);// 调⽤service层的⽅法,取得数据库中的值pageUtil.setList(list);// 保存到⼯具类中的集合model.addAttribute("pageUtil", pageUtil);// 传递到页⾯,存⼊值栈中model.addAttribute("members", list);//System.out.println("-------------------------");//System.out.println(list);return new ModelAndView("memberlist");// 跳转的相关页⾯}3.前端jsp页⾯<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="/jsp/jstl/fmt"%><%pageContext.setAttribute("APP_PATH", request.getContextPath());%><html><head><meta charset="utf-8"><title>管理员查看</title><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"><link rel="stylesheet" type="text/css" href="${APP_PATH }/css/bootstrap.min.css"><link rel="stylesheet" type="text/css" href="${APP_PATH }/css/bootstrapValidator.css"><style>.table_div{ width:90%; margin:0 auto;}</style><script type="text/javascript">function delete_alert(){alert("您确定删除?")}</script></head><body class="table-responsive"><!-- style="margin: 30px" --><!--⾯包屑导航--><div><ul class="breadcrumb"><li><a href="${pageContext.request.contextPath}/adminholle.jsp">⾸页</a></li><li class="active">⽤户管理</li></ul></div><div class="row search"><div class="col-md-6"><form action="${pageContext.request.contextPath}/member/list.do" method="post"><div class="input-group" style="width: 300px"><input type="text" class="form-control" name="name" value="${name}" placeholder="请输⼊要查询的⽤户名..."><span class="input-group-btn"><button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search"></span> 查询</button> </span></div></form></div><div class="text-right" style="width: 87%;height: 30px;"><a class="btn btn-success active btn-xs" id="add_btn" href="${pageContext.request.contextPath}/memberadd.jsp">添加</a> </div></div><%-- <div class="text-right" style="width: 87%;height: 30px;"><a class="btn btn-success active btn-xs" id="add_btn" href="${pageContext.request.contextPath}/adminsave.jsp">添加</a> </div> --%><!--table表单层--><div class="table_div"><table class="table table-striped table-bordered table-hover" width="1200px"><thead><tr><th align="center">会员编号</th><th align="center">⽤户名</th><th align="center">密码</th><th align="center">姓名</th><th align="center">性别</th><th align="center">⾝份证号</th><th align="center">移动电话</th><th align="center">Email</th><th align="center">住址</th><th align="center">操作</th></tr></thead><tbody><tr><c:forEach var="members" items="${members}"><tr><td align="center">${members.id}</td><td align="center">${ername}</td><td align="center">${members.password}</td><td align="center">${}</td><td align="center">${members.sex}</td><td align="center">${members.idNumber}</td><td align="center">${members.phone}</td><td align="center">${members.email}</td><td align="center">${members.address}</td><td align="center"> <a class="btn btn-danger active btn-xs" onclick="delete_alert()" href="${pageContext.request.contextPath}/member/delete.do?id=${members.id}">删除</a><a class="btn btn-info active btn-xs" href="${pageContext.request.contextPath}/member/updateselect.do?id=${members.id}">修改</a></td></tr></c:forEach></tr></tbody></table><div style="width: 79%;height:2px;"><!--页数显⽰-->共<font size="3" color="red">${pageUtil.pageNumber}</font>条,当前第<font size="3" color="red">${pageUtil.pageIndex}</font>页</div><!--分页--><div style="width: 93%;" class="text-right"><ul class="pagination"><li><a href="${APP_PATH }/member/list.do?pageIndex=1">⾸页</a></li><li><a href="${APP_PATH }/member/list.do?pageIndex=${pageUtil.pageIndex>1?pageUtil.pageIndex-1:1}" class='pre'>上⼀页</a></li><c:forEach begin="1" end="${pageUtil.pageCount}" var="i"><li><a href="${APP_PATH }/member/list.do?pageIndex=${i}" style="text-decoration: none;">${i}</a></li></c:forEach><li><a href="${APP_PATH }/member/list.do?pageIndex=${pageUtil.pageIndex<pageUtil.pageCount?pageUtil.pageIndex+1:pageUtil.pageCount}" class='next'>下⼀页</a></li> <li><a href="${APP_PATH }/member/list.do?pageIndex=${pageUtil.pageCount}" class='last' >末页</a></li></ul></div></div><script type="text/javascript" src="${APP_PATH }/js/jquery-3.2.1.min.js"></script><script type="text/javascript" src="${APP_PATH }/js/bootstrap.min.js"></script></body></html>4.数据库 dao层 service 省略。
pagehelper 的doselectpage方法
PageHelper的doSelectPage方法是PageHelper插件中的一个核心方法,用于实现数据库分页查询功能。
该方法的作用是根据传入的参数进行查询,并返回查询结果的分页数据。
doSelectPage方法的主要参数包括pageNum、pageSize和count参数。
pageNum 参数表示当前页码,表示要查询的页数;pageSize参数表示每页显示的记录条数;count参数表示是否查询总记录数。
在使用doSelectPage方法时,还需要在方法调用之前使用PageHelper.startPage方法设置相关的分页参数。
使用doSelectPage方法进行分页查询非常简单。
首先,在代码中引入PageHelper插件的依赖,并通过引入的类进行startPage方法的初始化设置。
然后,在执行查询的方法中调用doSelectPage方法,并传入相关的查询条件和分页参数。
最后,通过使用doSelectPage方法返回的Page对象获取查询结果的分页数据。
doSelectPage方法返回的Page对象包含了查询结果的分页数据,比如当前页数据、总记录数、总页数等信息。
可以通过Page对象提供的方法来获取这些数据,并在前端页面进行展示。
PageHelper的doSelectPage方法是开发中常用的一个方法,可以极大地简化数据库分页查询的实现过程。
通过合理使用该方法,可以有效提高查询效率,提升用户体验。
JavaWeb实现分页的四种⽅法⼀.借助数组进⾏分页原理:进⾏数据库查询操作时,获取到数据库中所有满⾜条件的记录,保存在应⽤的临时数组中,再通过List的subList⽅法,获取到满⾜条件的所有记录。
实现:⾸先在dao层,创建StudentMapper接⼝,⽤于对数据库的操作。
在接⼝中定义通过数组分页的查询⽅法,如下所⽰:1 List<Student> queryStudentsByArray();⽅法很简单,就是获取所有的数据,通过list接收后进⾏分页操作。
创建StudentMapper.xml⽂件,编写查询的sql语句:1 <select id="queryStudentsByArray" resultMap="studentmapper">2 select * from student3 </select>可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。
这⾥是查询到所有的学⽣信息。
接下来在service层获取数据并且进⾏分页实现:定义IStuService接⼝,并且定义分页⽅法: List<Student> queryStudentsByArray(int currPage, int pageSize);通过接收currPage参数表⽰显⽰第⼏页的数据,pageSize表⽰每页显⽰的数据条数。
创建IStuService接⼝实现类StuServiceIml对⽅法进⾏实现,对获取到的数组通过currPage和pageSize进⾏分页:1@Override2public List<Student> queryStudentsByArray(int currPage, int pageSize) {3 List<Student> students = studentMapper.queryStudentsByArray();4// 从第⼏条数据开始5int firstIndex = (currPage - 1) * pageSize;6// 到第⼏条数据结束7int lastIndex = currPage * pageSize;8return students.subList(firstIndex, lastIndex);9 }通过subList⽅法,获取到两个索引间的所有数据。
一、背景介绍在大多数的Web应用程序中,分页查询和倒序获取数据是非常常见的需求,特别是在需要展示大量数据的情况下。
而在使用Java语言开发的应用程序中,如何实现对数据库中数据的分页查询和倒序获取是一个比较关键的技术问题。
二、分页查询的方法1. 使用数据库的分页查询语句在Java中,可以通过使用数据库的分页查询语句来实现对数据的分页查询。
在关系型数据库中,通常使用类似于“limit offset, size”的语法来实现分页查询。
在MySQL中可以使用类似于“SELECT * FROM table LIMIT 0, 10”来实现获取表中的前10条数据。
在Java 中,可以使用JDBC或者ORM框架来执行这样的SQL语句。
2. 使用分页查询框架除了直接使用SQL语句来实现分页查询,还可以使用一些开源的分页查询框架来简化开发。
比较常用的分页查询框架包括MyBatis和Spring Data JPA,它们提供了封装了分页查询功能的API,开发人员可以通过调用这些API来实现分页查询功能,而不需要手动编写分页查询的SQL语句,减少了开发的工作量。
三、倒序获取数据的方法1. 使用数据库的倒序查询语句类似于分页查询,倒序获取数据也可以通过使用数据库的倒序查询语句来实现。
在关系型数据库中,可以使用类似于“ORDER BY column DESC”来实现对数据的倒序获取。
在MySQL中可以使用类似于“SELECT * FROM table ORDER BY id DESC LIMIT 0, 10”来获取倒序的前10条数据。
在Java中可以通过JDBC或者ORM框架来执行这样的SQL语句。
2. 使用排序框架除了直接使用SQL语句来实现倒序获取数据,也可以使用一些开源的排序框架来简化开发。
比较常用的排序框架包括MyBatis和Spring Data JPA,它们提供了封装了排序功能的API,开发人员可以通过调用这些API来实现倒序获取数据的功能,而不需要手动编写倒序查询的SQL语句,同样减少了开发的工作量。
SpringBoot整合PageHelper实现分页查询功能详解前⾔本⽂介绍的是MyBatis 分页插件 PageHelper,如果你也在⽤ MyBatis,建议尝试该分页插件,这⼀定是最⽅便使⽤的分页插件。
分页插件⽀持任何复杂的单表、多表分页。
使⽤⽅法导⼊依赖在中央仓库中搜索pageHelper,找到pagehelper-spring-boot-starter可以⾃选版本,选择你所使⽤的依赖管理⼯具对应的依赖坐标,例如我⽤的依赖管理⼯具是Maven,那我就选择对应Maven的依赖坐标。
添加pagehelper-spring-boot-starter的Maven依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version></dependency>添加该依赖之后⽆需再添加MyBatis的依赖,因为该依赖默认依赖了MyBatis:编写配置⽂件使⽤yaml格式:pagehelper:helper-dialect: mysqlreasonable: truesupport-methods-arguments: trueparams: count=countSql使⽤properties格式:# 指定分页插件的⽅⾔pagehelper.helper-dialect=mysql# 分页合理化pagehelper.reasonable=true# ⽀持⽅法参数pagehelper.support-methods-arguments=true#配置参数映射pagehelper.params=count=countSql参数说明:可参考官⽅⽂档准备数据表准备Mapper接⼝测试查询全部数据运⾏结果:默认SQL语句就是查询全部数据PageHelper 分页查询使⽤PageHelper.startPage(pageNum,pageSize)⽅法来设置分页信息,分别是当前页数和每页显⽰的总记录数注意:必须在mapper接⼝中的⽅法执⾏之前设置该分页信息运⾏结果:PageHelper.startPage(pageNum,pageSize)⽅法只对后⾯⼀次查询⽣效下⾯有2次查询所有数据,第1次查询所有数据前插⼊了PageHelper.startPage(pageNum,pageSize)⽅法,所以第1次查询是分页查询,⽽第2次查询前没有插⼊PageHelper.startPage(pageNum,pageSize)⽅法,所以不是分页查询。
PageHelper是一个为MyBatis提供物理分页查询功能的插件。
它简化了MyBatis应用中的分页逻辑,通过拦截SQL语句并改写成包含分页信息的SQL语句,从而实现分页功能。
下面是PageHelper分页查询的基本原理:1. 插件集成:首先将PageHelper作为一个MyBatis插件集成到项目中,并在MyBatis的配置文件中配置该插件。
2. 设置分页参数:在执行查询之前,通过PageHelper的静态方法`startPage`设置当前页码和每页显示数量。
```javaPageHelper.startPage(1, 10); // 查询第1页,每页返回10条数据```3. 查询拦截:当执行查询操作时,PageHelper会通过MyBatis的拦截器机制拦截待执行的SQL语句。
拦截器基于动态代理实现。
4. SQL改写:PageHelper会对原始SQL语句进行改写,添加数据库对应的分页查询语句。
例如,在MySQL数据库中,会添加`LIMIT`和`OFFSET`子句来实现分页功能。
```sqlSELECT * FROM table_name LIMIT 10 OFFSET 0; // 限制返回的数据条数并设置偏移量```5. 执行分页查询:改写后的SQL语句执行分页查询,数据库返回当前页的数据结果集。
6. 结果处理:PageHelper会处理查询结果,返回一个`Page<E>`对象,其中包含了分页信息(如总记录数、总页数、当前页码等)和当前页的数据列表。
7. 清理分页参数:查询完成后,PageHelper会清理掉之前设置的分页参数,以免影响后续的非分页查询。
PageHelper工作流程的核心在于拦截和改写SQL语句,它利用了MyBatis提供的插件API来实现SQL的拦截和动态改写。
这种方式使得开发者不需要在代码中手动编写繁琐的分页逻辑,只需在查询前调用一个方法即可实现物理分页,极大地提高了开发效率。
SQLServer使⽤ROW_NUMBER进⾏快速分页查询
SQL Server中查询分页数据的⽅法有不少,主要有以下两种
1、采⽤Top – Not In - Top⽅案,此⽅法⽐较复杂,多嵌套,⾥⾯包含了in语句,效率不⾼,但是兼容个版本的SQL Server。
2、采⽤ROW_NUMBER()⽅法实现分页难易适中,效率较⾼。
LINQ中的SKIP和TAKE也是采⽤这种⽅式来进⾏分页的,应该是⽬前采⽤的⽐较⼴泛的分页⽅式。
但是ROW_NUMBER()只⽀持SQL2005及以上版本
下⾯我们来看⼀下使⽤ROW_NUMBER()如何进⾏分页查询
我们可以通过ROW_NUMBER() OVER()进⾏排序并得到⼀个带序号的视图,再通过序号确定要查找的分页数据
例如:
DECLARE@pageSize INT
DECLARE@pageIndex INT
--第4页,每页显⽰10条数据
SET@pageSize=10
SET@pageIndex=4
SELECT*FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY Created_Time ASC) AS'RowNumber', *FROM _UserInfo
) AS UserInfo
WHERE RowNumber BETWEEN ( ( ( @pageIndex-1 ) *@pageSize ) +1 ) AND ( @pageIndex*@pageSize )。
在servlet中如何分页显示表中查询的数据
2009-04-09 0:50
分页的算法
我们需要定义四个变量,它们有各自的用处
int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录
说明:
pageSize是指定的,pageNow是用户选择的,rowCount是从表中查询到的,pageCo 计算公式为
if(rowCount%pageSize==0)
{
pageCount = rowCount/pageSize;
}
else
{
pageCount = rowCount/pageSize+1;
}
我们查询某页显示的数据的最终方法用如下语句:
select top pageSize 字段名列表from 表名where id not in
(select top pageSize*(pageNow-1) id from 表名)
实例:
//分页显示字段job_desc的内容
package app;
import javax.servlet.http.*;
//import javax.servlet.ServletException;
import java.io.*;
import java.sql.*;
public class PageTest extends HttpServlet
{
//处理get请求
//req:用于获得客户端(浏览器)的信息
//res:用于向客户端(浏览器)返回信息
Connection connect = null;
PreparedStatement pstate = null;
ResultSet result = null;
public void doGet(HttpServletRequest req, HttpServletResponse res) {
//业务逻辑
try
{
res.setContentType("text/html;charset=gbk");
res.setCharacterEncoding("gbk");
PrintWriter out = res.getWriter();
//==============分页的功能===============
int pageSize = 3;//一页显示几条记录
int pageNow = 1;//希望显示第几页
int rowCount = 0;//一共有几条记录(查表)
int pageCount = 0;//一共有几页(计算)
//动态的接收pageNow
String sPageNow = req.getParameter("pageNow");
if(sPageNow!=null)
{
pageNow = Integer.parseInt(sPageNow);
}
//得到rowCount
//加载jdbc驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//得到数据库连接
connect=DriverManager.getConnection("jdbc:odbc:mydb2","sa","123456"); pstate = connect.prepareStatement("select count(*) from jobs");
result = pstate.executeQuery();
if(result.next())
{
rowCount = result.getInt(1);
}
//计算pageCount
if(rowCount%pageSize==0)
{
pageCount = rowCount/pageSize;
}
else
{
pageCount = rowCount/pageSize+1;
}
pstate = connect.prepareStatement("select top "+pageSize+" * from jobs where j "+pageSize*(pageNow-1)+" job_id from jobs)");
result = pstate.executeQuery();
out.println("<table border=1>");
out.println("<tr><th>job_desc</th></tr>");
while(result.next())
{
out.println("<tr>");
out.println("<td>"+result.getString(2)+"</td>");
out.println("</tr>");
}
out.println("</table>");
if(pageNow>1)
{
out.println("<a href=pageTest?pageNow="+(pageNow-1)+">上一页</a>"); }
//显示超链接
for(int i=1;i<=pageCount;i++)
{
out.println("<a href=pageTest?pageNow="+i+">"+i+"</a>");
}
if(pageNow<pageCount)
{
out.println("<a href=pageTest?pageNow="+(pageNow+1)+">下一页</a>");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
//处理post请求
//req:用于获得客户端(浏览器)的信息
//res:用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res) {
this.doGet(req,res);
}
}。