JSP分页方法
ASP 数据的分页显示

ASP 数据的分页显示
在ASP中,数据的分页显示非常实用,它的应用可以使数据表中的多条数据实现分页显示,使数据的显示更加条理清晰。
本扩展练习的目的是:使数据表messageTable中的数据实现分页显示,并实现数据的翻页功能。
(1)创建一个命名为Message.asp的ASP页面,主要实现留言内容的添加。
左键单击【文件】|【新建】命令,弹出【新建文档】对话框,在对话框的【文件类型】中选择【ASP VbScript】,【布局】中选择【无】,单击【创建】按钮。
(2)左键单击【文件】|【保存】命令,弹出另存为对话框。
在对话框的【文件名】中输入Message.asp,【保存类型】的下拉列表框中选择“Active Server Pages(*.asp;*.asa)”,单击【保存(S)】按钮。
库驱动程序,然后建立链接并查询数据返回结果集rs
(5)向ASP文件中,添加表格,并在表格中输出数据。
首先向表格中添加标
(7)关闭数据库链接,代码如下所示。
.
图9-5 分页显示。
第2章 JSP页面与JSP标记

S J
P
2.6.1 page 指令_info属性
info属性的属性值是一个字符串,其目的是为JSP 页面准备一个常用且可能需要经常修改的字符串。
例如: <%@ page info= “we are students” %> 注:可以在JSP页面中使用方法: getServletInfo(); 获取info属性的属性值。
page 指令标记可以指定如下属性的值contentType、import、
属性1=“属性1的值”
属性2= “属性2的值”
……%>
属性1="属性1的值" %> 属性2="属性2的值" %> 属性n=“属性n的值” %>
page指令的作用对整个JSP页面有效,与其书写的位置无关,习惯把page指令 写在JSP页面的最前面。
S J
P
§2.5 JSP中的注释
-->
1. HTML注释格式 : <!-- 注释内容
发送到客户端的注释 <!-- jsp网页自身注释的内容 --> 客户端察看源代码可以看见
2. JSP注释格式: <%-- 注释内容 --%> Jsp网页自身注释
<%--
jsp网页自身注释的内容 --%> 用于描述JSP程序代码,不会被JSP引擎解释,也不会输送 到客户端
S J
P
如果写成 :<% int i; i++%> 会出现i没有初始化的错误
S J
P
§2.4 表达式
“<%=”和“%>”之间可以是一个Java表达
式 。 表达式不能以;结尾。 表达式的值由服务器负责计算,并将计算 结果用String形式发送到客户端显示。
pageutils分页原理

pageutils分页原理PageUtils分页原理什么是PageUtils分页原理?PageUtils分页原理是一种常用的分页工具,用于将大量数据分为多页显示。
通过该原理,用户可以在前端页面上方便地切换不同的页码,以便快速浏览和定位所需数据。
PageUtils分页的基本原理1.确定总数据量:在进行分页前,需要确定需要分页的总数据量。
可以通过数据库查询等方式获得。
2.设置每页显示条数:在实施分页前,需要设置每页要显示的数据条数。
根据用户需求和页面布局,一般会设定一个合理的默认值。
3.计算总页数:根据总数据量和每页显示条数,可以通过以下公式计算总页数:总页数 = (总数据量 / 每页显示条数) 向上取整。
4.确定当前页码:当用户访问某一页时,需要确定当前页码。
一般情况下,用户可以通过点击页码或通过输入页码跳转到指定的页码。
5.计算数据偏移量:当前页码乘以每页显示的条数减去每页显示的条数,即为数据偏移量。
例如,若每页显示10条数据,当前页码为3,则数据偏移量为:(3 * 10) - 10 = 20。
6.查询当前页数据:通过数据库查询等方式,根据数据偏移量和每页显示条数,获取当前页需要显示的数据。
7.生成分页导航栏:根据总页数和当前页码,生成分页导航栏。
一般情况下,导航栏会显示当前页码和总页数,并提供切换页码的链接。
PageUtils分页的优势•提高页面加载速度:当数据量较大时,使用分页可以避免一次性加载所有数据,减少页面加载时间,提升用户体验。
•方便数据管理:分页使得数据的管理更加简单和便捷。
用户可以根据不同的需求,快速定位和浏览所需数据,提高工作效率。
•减少网络流量消耗:通过分页,只请求当前页所需数据,避免了大批量无用数据的传输,减少了网络流量的消耗。
•提高系统性能:分页可以减少数据库的负载,降低系统压力,提高系统的性能表现。
总结PageUtils分页原理是一种常用的分页工具,通过将大量数据按页码划分,提供了高效浏览和定位数据的功能。
java redis 缓存分页实现原理

java redis 缓存分页实现原理Java Redis缓存是一种用于在Web应用程序中提高数据访问性能的技术。
它通过将常用的数据存储在内存中,以便更快地访问和获取,从而减少了对数据库的访问。
分页是Web应用程序中常见的功能之一,它允许用户在列表或表格中浏览数据,并按页查看数据,以减少数据量和提高用户体验。
Java Redis缓存的分页实现原理是,将查询的结果集划分为多个页,并将每个页的数据存储在Redis缓存中,以供后续的访问和查询。
下面将详细介绍Java Redis缓存分页的实现原理。
1.将查询结果集分页:在数据库查询之后,将结果集按照每页显示的数量划分为多个页,例如每页显示10条数据,将结果集分为若干个包含10条数据的页。
这样可以方便后续的分页访问和查询。
2.将每页的数据存储到Redis缓存中:对于每个分页的数据,将其存储到Redis缓存中。
可以使用Redis 的数据结构Hash或List来存储每页的数据。
对于Hash结构,可以使用页号作为Key,对应的数据作为Value,将所有页的数据存储到一个Hash中。
对于List结构,可以使用一个List来存储所有的分页数据,每个分页数据作为一个元素。
通过使用Redis缓存,可以提高分页的访问速度和性能。
3.使用Redis缓存进行分页查询:当用户请求分页数据时,首先从Redis缓存中获取对应页的数据。
如果缓存中存在该页的数据,则直接返回给用户;如果缓存中不存在该页的数据,则从数据库中查询该页的数据,并存储到Redis缓存中,以供后续的查询和访问。
4.缓存失效和更新:为了保证数据的实时性,需要处理缓存的失效和更新问题。
当用户修改或删除数据时,需要更新对应页的数据缓存,或者将所有缓存的数据进行失效处理,以保证数据的一致性。
可以通过监听数据的修改和删除操作,在数据库操作完成后,更新或失效对应的缓存数据。
5.缓存过期时间设置:为了控制内存使用和避免缓存数据过时,可以设置缓存数据的过期时间。
paginationinnerinterceptor使用

paginationinnerinterceptor使用分页是在网站开发中非常常见的功能之一,可以帮助用户更方便地查看和导航大量的数据。
为了实现分页功能,我们通常会使用一些第三方的库或者插件,来简化开发过程。
而在Java开发中,Struts2框架提供了一个名为paginationinnerinterceptor的拦截器,可以很方便地实现分页功能。
paginationinnerinterceptor是Struts2框架中的一个拦截器,它的作用是拦截Action请求,并对分页参数进行处理。
使用paginationinnerinterceptor可以将分页参数直接映射到Action的属性上,从而实现分页功能。
下面我们来看一下如何使用paginationinnerinterceptor来实现分页功能。
首先,我们需要在Struts2的配置文件struts.xml中配置paginationinnerinterceptor。
我们可以定义一个全局的拦截器栈,在拦截器栈中添加paginationinnerinterceptor拦截器。
具体的配置如下所示:```xml<package name="default" namespace="/" extends="struts-default"><interceptors><interceptor-stack name="paginationStack"><interceptor-ref name="defaultStack" /><interceptor-ref name="paginationinnerinterceptor" /></interceptor-stack></interceptors><default-interceptor-ref name="paginationStack" />...</package>```接下来,我们需要在Action中定义用于接收分页参数的属性。
jsp教程pdf

JSP教程PDF概述本文档旨在为初学者提供有关JavaServer Pages(JSP)的详细教程,并帮助读者了解如何使用JSP构建动态Web应用程序。
本教程将从JSP的基本概念和语法开始介绍,并逐步深入探讨更高级的主题,以帮助读者熟悉JSP开发的各个方面。
什么是JSP?JavaServer Pages(JSP)是一种用于生成动态Web页面的Java技术。
它允许开发人员将Java代码嵌入到HTML页面中,以便根据特定的逻辑和数据生成动态内容。
与静态HTML页面不同,JSP页面可以根据用户的请求和服务器的响应动态生成内容。
JSP的优势相比于传统的Servlet编程,JSP具有以下优势: - 简化开发:JSP允许开发人员在HTML页面中嵌入Java代码,减少了编写Java代码的工作量,并提供了一种更直观的开发方式。
- 可重用性:JSP支持自定义标签库和标签文件,开发人员可以将一些常用的功能封装成标签,以便在不同的页面中重复使用。
- 易于维护:由于JSP和HTML代码的分离,使得前端开发人员可以专注于页面设计和样式,而后端开发人员可以专注于业务逻辑处理,使得代码的维护更加简单。
- 性能优化:JSP可以通过使用JSTL标签库、EL表达式和缓存机制来优化页面的性能,提高Web应用程序的响应速度。
JSP基础语法注释与Java代码类似,JSP中可以使用单行注释和多行注释:<%-- 这是一个单行注释 --%><% /* 这是一个多行注释 */ %>脚本块在JSP中,可以使用脚本块来插入Java代码: ```jsp <% // 这是一个Java代码块 int num = 10; String message =。
Java相关课程系列笔记之10JSP学习笔记(建议用WPS打开)
JSP学习笔记Java相关课程系列笔记之十笔记内容说明JSP(程祖红老师主讲,占笔记内容100%);目录一、JSP基础 (1)1.1什么是JSP (1)1.2为什么要使用JSP (1)1.3 JSP与Servlet的关系 (1)1.4如何写一个JSP文件 (1)1.5 JSP是如何运行的 (1)1.6隐含对象 (2)1.7指令 (2)1.8 JSP注释 (3)1.9案例:创建emplist.jsp页面,将表示逻辑交给JSP处理 (3)二、JSP标签和EL表达式 (4)2.1什么是JSP标签 (4)2.2 JSTL及其使用 (4)2.3什么是EL表达式 (4)2.4 EL表达式的使用 (4)三、JSTL中的几个核心标签 (7)3.1 if (7)3.2 choose (7)3.3 forEach (7)3.4 url (8)3.5 set (8)3.6 remove (8)3.7 catch (8)3.8 import (8)3.9 redirect (8)3.10 out (8)3.11 JSP标签是如何运行的 (8)3.12案例:将员工列表中的Java代码改为JSP标签,并添加分页 (9)四、自定义标签 (10)4.1如何写一个自定义标签 (10)4.2 JavaEE5.0中,如何使用EL表达式和JSTL (10)4.3案例:自定义标签 (10)4.4案例:修改之前员工列表中的日期显示 (11)五、MVC (13)5.1什么是MVC (13)5.2使用MVC的目的 (13)5.3如何使用MVC来开发一个Web应用程序(JavaEE) (13)5.4 MVC的优缺点 (13)5.5案例:简易贷款(贷款数小于余额数*10) (13)5.6修改5.5案例,使用户无法直接访问view.jsp页面 (15)1一、JSP基础1.1什么是JSPJSP(Java Server Page)是Java服务器端动态页面技术。
JSP课件2 JSP页面
2.7.2<Input>标记 :指定表单中数据的提交方式和表
单的提交键。服务器通过name获取数据。
•格式:
–
<Input type=“输入对象的GUI类型” name= “名字” >
•常见类型:
–text类型:包含name,value,size,align,maxlength等属性。 –radio类型:包含name,value, align,checked等属性。 –checkbox类型:包含name,value, align,checked等属性。 –password类型:包含name,size,maxlength等属性。 –hidden类型:包含name,value等属性。 –submit类型:包含name,value,size等属性。 –reset类型:包含name等属性。
2.3. Java程序片
• 在“<%”和“%>”之间插入Java程序片
– 程序片按照先后顺序执行 – 多客户请求同页面时,程序片多线程执行
• 程序片中声明的变量称为局部变量:
– 局部变量在后续的程序片中都有效
• 程序片的特点:
– – – – 操作成员变量:共享,多线程相互影响 可以直接调用本页面定义的方法 局部变量在多线程中透明,互不干扰 互斥方法:方法前加synchronized
补充 HTML标记
JSP页面的数据表示层:html; JSP页面数据处理层:和Java相关的内容。
2.7.1.表单标记 :
<FORM method= get| post
action=“提交信息的 目的地页面” name="表单的名字"> 数据提交手段部分 </FORM> •get和post的区别:在地址栏中是否显示提交信息
java 分页计算公式
java 分页计算公式
在Java中,分页计算公式通常涉及到以下变量:
•总记录数(Total)
•每页显示记录数(PageSize)
•当前页码(CurrentPage)
基于这些变量,你可以使用以下公式来计算当前页的开始记录索引和结束记录索引:
1.
计算当前页的开始记录索引(基于0的索引):
java复制代码
int startIndex = (CurrentPage - 1) * PageSize;
2.
计算当前页的结束记录索引:
java复制代码
int endIndex = Math.min(startIndex + PageSize, Total);
3.
获取当前页的记录列表:
java复制代码
List<Record> records = getRecordsByPage(startIndex, endIndex);
其中,getRecordsByPage方法可以根据开始和结束索引从数据库中获取相应的记录列表。
以下是一个完整的Java方法示例,用于根据给定的参数计算分页记录列表:
java复制代码
public List<Record> getRecordsByPage(int startIndex, int endIndex) { // 根据开始和结束索引从数据库中获取记录列表
// ...
return records;
}
请注意,这只是一个简单的示例,实际应用中可能需要考虑更多的边界情况和优化。
Ext Js分页显示示例原理详解
Ext Js分页显示示例原理详解前几天我们项目组讨论给**公司关于**产品做一个功能展示的用例。
讨论到view层时,用那种框架。
最终选中了大名鼎鼎的EXT JS 框架来做view。
这里的view涉及的不是很复杂。
因为它仅仅是个Demo。
最常用的就是分页显示数据了。
目前extjs仅仅支持xml和json两种格式的数据展现。
就性能而言。
Extjs不可能用于较大的项目。
性能确实不敢恭维。
这里我们仅仅简单的介绍一下它的分页原理。
其实他的源码中提供了大量的例子。
可以参考一下。
该例子就是基于它的官方例子实现的。
目前,市场是比较流行的数据关于extjs就是“深入浅出extjs“了,该书编写的却是不怎么样。
如果想学习extjs,最好研究研究它的源码的例子就行了。
Jar包如下:其中json-lib-2.2.1-jdk1.5.jar xstream-1.3.jar是转换集合类型转换json类型的主要jar包。
测试工程的包路径如下:该示例是用strus2做的mvc。
action类:package action;import bean.Bean;import com.opensymphony.xwork2.ActionSupport;import java.util.ArrayList;import java.util.List;import javax.servlet.http.*;import mons.logging.Log;import mons.logging.LogFactory;import org.apache.struts2.ServletActionContext;import util.ExtHelper;public class DisplayAction extends ActionSupport{private static final Log log=LogFactory.getLog(DisplayAction.class);private static final long serialV ersionUID = 1L;private HttpServletResponse response;private HttpServletRequest request;private int start;private int limit;//表示数据库中数据总条数,用户分页显示private static final long totalResult=100;public String display() throws Exception{List list=new ArrayList();for(int i=0;i<5;i++){bean.Bean bean=new Bean();bean.setId(i);bean.setDetail("detil"+i);bean.setTitle("title"+i);list.add(bean);}String json = ExtHelper.getJsonFromList(totalResult,list);("list转换成json格式的数据开始");(json);response = ServletActionContext.getResponse();response.setContentType("application/xml;charset=UTF-8");response.getWriter().write(json);return null;}}Po类:package bean;public class Bean {private int id;private String title;private String detail;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) { this.title = title;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail;}}ExtHelper类:package util;import java.util.ArrayList;import java.util.List;import net.sf.json.JSONObject;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver;public class ExtHelper {/***list转换成xml*/public static String getXmlFromList(long recordTotal , List beanList) { Total total = new Total();total.setResults(recordTotal);List resultlist = new ArrayList();resultlist.add(total);XStream sm = new XStream(new DomDriver());for (int i = 0; i < resultlist.size(); i++) {Class c = resultlist.get(i).getClass();String b = c.getName();String[] temp = b.split("\\.");sm.alias(temp[temp.length - 1], c);}String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + sm.toXML(resultlist);System.out.println("**********************************"+xml);return xml;}/***list转换成json*/public static String getJsonFromList(long recordTotal , List ListbeanList){TotalJson total = new TotalJson();total.setResults(recordTotal);JSONObject JsonObject = JSONObject.fromObject(total);return JsonObject.toString();}}TotalJson类:package util;import java.util.List;public class TotalJson {private long results;private List items;public List getItems() {return items;}public void setItems(List items) {this.items = items;}public long getResults() {return results;}public void setResults(long results) {this.results = results;}}Struts.xml<!DOCTYPE struts PUBLIC '-//Apache Software Foundation//DTD Struts Configuration 2.0//EN''/dtds/struts-2.0.dtd'><struts><constant name="struts.i18n.encoding" value="UTF-8"/><package name="ext_fenye" extends="struts-default"><action name="getDataList" class="action.DisplayAction" method="display"></action></package></struts>JSP:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>ExtJs-FenY e</title><link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/pagesExt/ext-2.2.1/resources/css/ext-all.css" /><link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/pagesExt/css/style.css" /><script type="text/javascript"src="${pageContext.request.contextPath}/pagesExt/ext-2.2.1/adapter/ext/ext-base.js"></script><script type="text/javascript" src="${pageContext.request.contextPath}/pagesExt/ext-2.2.1/ext-all.js"></script><script type="text/javascript" src=""${pageContext.request.contextPath}/pagesExt/ext-2.2.1/ext-all-debug.js"> </script></head><script type="text/javascript">Ext.onReady(function(){//定义数据集对象var typeStore = new Ext.data.Store({//配置分组数据集autoLoad :{params : {start:0,limit : 6}},//默认加载参数:start=0,limit=6reader: new Ext.data.JsonReader({totalProperty: "results",root: "items",//和action的list的名称一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 JSP分页方法 前言 在使用数据库的过程中,不可避免的需要使用到分页的功能,可是JDBC的规范对此却没有很好的解决。对于这个需求很多朋友都有自己的解决方案,比如使用Vector等集合类先保存取出的数据再分页。但这种方法的可用性很差,与JDBC本身的接口完全不同,对不同类型的字段的支持也不好。这里提供了一种与JDBC兼容性非常好的方案。
JDBC和分页 Sun的JDBC规范的制定,有时很让人哭笑不得,在JDBC1.0中,对于一个结果集(ResultSet)你甚至只能执行next()操作,而无法让其向后滚动,这就直接导致在只执行一次SQL查询的情况下无法获得结果集的大小。所以,如果你使用的是JDBC1.0的驱动,那么是几乎无法实现分页的。 好在Sun的JDBC2规范中很好的弥补了这一个不足,增加了结果集的前后滚动操作,虽然仍然不能直接支持分页,但我们已经可以在这个基础上写出自己的可支持分页的ResultSet了。
和具体数据库相关的实现方法 有一些数据库,如Mysql, Oracle等有自己的分页方法,比如Mysql可以使用limit子句,Oracle可以使用ROWNUM来限制结果集的大小和起始位置。这里以Mysql为例,其典型代码如下: // 计算总的记录条数 String SQL = "SELECT Count(*) AS total " + this.QueryPart; rs = db.executeQuery(SQL); if (rs.next()) Total = rs.getInt(1); // 设置当前页数和总页数 TPages = (int)Math.ceil((double)this.Total/this.MaxLine); CPages = (int)Math.floor((double)Offset/this.MaxLine+1); 2
// 根据条件判断,取出所需记录 if (Total > 0) { SQL = Query + " LIMIT " + Offset + " , " + MaxLine; rs = db.executeQuery(SQL); } return rs; } 毫无疑问,这段代码在数据库是Mysql时将会是漂亮的,但是作为一个通用的类(事实上我后面要提供的就是一个通用类库中的一部分),需要适应不同的数据库,而基于这个类(库)的应用,也可能使用不同的数据库,所以,我们将不使用这种方法。
另一种繁琐的实现方法 我看过一些人的做法(事实上包括我在内,一开始也是使用这种方法的),即不使用任何封装,在需要分页的地方,直接操作ResultSet滚到相应的位置,再读取相应数量的记录。其典型代码如下: <%
sqlStmt =
sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
strSQL = "select name,age from test";
//执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
%>
<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i
sqlRst.next();
i++;
}
}
%>
使用Vector(或RowSet)进行分页 还见过另一些实现分页的类,是先将所有记录都select出来,然后将ResultSet中的数据都get出来,存入Vector等集合类中,再根据所需分页的大小,页数,定位到相应的位置,读取数据。或者先使用前面提到的两种分页方法,取得所需的页面之后,再存入Vector中。 扔开代码的效率不说,单是从程序结构和使用的方便性上讲,就是很糟糕的。比如,这种做法支持的字段类型有限,int, double, String类型还比较好处理,如果碰到Blob, Text等类型,实现起来就很麻烦了。这是一种更不可取的方案。
一个新的Pageable接口及其实现 很显然,看过上面三种实现方法后,我们对新的分页机制有了一个目标,即:不与具体数据库相关;尽可能做到代码重用;尽可能与原JDBC接口的使用方法 4
保持一致;尽可能高的效率。 首先,我们需要提供一个与java.sql.ResultSet向下兼容的接口,把它命名为Pageable,接口定义如下: public interface Pageable extends java.sql.ResultSet{ /**返回总页数 */ int getPageCount(); /**返回当前页的记录条数 */ int getPageRowsCount(); /**返回分页大小 */ int getPageSize(); /**转到指定页 */ void gotoPage(int page) ; /**设置分页大小 */ void setPageSize(int pageSize); /**返回总记录行数 */ int getRowsCount(); /** * 转到当前页的第一条记录 * @exception java.sql.SQLException 异常说明。 */ void pageFirst() throws java.sql.SQLException; /** * 转到当前页的最后一条记录 * @exception java.sql.SQLException 异常说明。 */ void pageLast() throws java.sql.SQLException; /**返回当前页号 */ int getCurPage(); } 这是一个对java.sql.ResultSet进行了扩展的接口,主要是增加了对分页的支持,如设置分页大小,跳转到某一页,返回总页数等等。 5
接着,我们需要实现这个接口,由于这个接口继承自ResultSet,并且它的大部分功能也都和ResultSet原有功能相同,所以这里使用了一个简单的Decorator模式。 PageableResultSet2的类声明和成员声明如下: public class PageableResultSet2 implements Pageable { protected java.sql.ResultSet rs=null; protected int rowsCount; protected int pageSize; protected int curPage; protected String command = ""; } 可以看到,在PageableResultSet2中,包含了一个ResultSet的实例(这个实例只是实现了ResultSet接口,事实上它是由各个数据库厂商分别实现的),并且把所有由ResultSet继承来的方法都直接转发给该实例来处理。 PageableResultSet2中继承自ResultSet的主要方法: //…… public boolean next() throws SQLException { return rs.next(); } //…… public String getString(String columnName) throws SQLException { try { return rs.getString(columnName); } catch (SQLException e) {//这里是为了增加一些出错信息的内容便于调试 throw new SQLException (e.toString()+" columnName=" +columnName+" SQL="+this.getCommand()); } } //…… 只有在Pageable接口中新增的方法才需要自己的写方法处理。 /**方法注释可参考Pageable.java */ public int getCurPage() { return curPage; } public int getPageCount() { if(rowsCount==0) return 0;