`

JSP实现的Java通用简单分页算法

阅读更多
这段代码被广泛转载,在此仅作收藏之用。
Jsp如下:
 
**********************   
<%@ page language="java" import="java.util.*,java.sql.*" %>   
<%@ page contentType="text/html;charset=gb2312"%>   
<jsp:useBean id="cn" scope="page" class="myConnection.Conn" /><!--引用数据库操作的bean,自己完成,这里不再赘述-->   
<%   
int curpage=1;//当前页   
int page_record=20;//每页显示的记录数   
//用下面的方法(sql查询完成,速度快)   
curpage=Integer.parseInt(request.getParameter("page"));//获取传递的值,需要显示的页   
ResultSet rs=cn.rsexecuteQuery("select top " page_record " * from tablename where id not in (select top " (curpage*page_record) " id from tablename order by id desc) order by id desc");   
//本查询语句得到的是所要显示的1000页的20条记录,大致思路为——子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列   
while(rs.next) {   
out.println(rs.getInt("id").toString());   
}   
rs.close();   
%>  



 

分享到:
评论
1 楼 xf.zhouwenjun 2009-10-21  


其一:

view plaincopy to clipboardprint?
<%@ page contentType="text/html;charset=8859_1" %>  
<%  
//变量声明  
java.sql.Connection sqlCon; //数据库连接对象  
java.sql.Statement sqlStmt; //SQL语句对象  
java.sql.ResultSet sqlRst; //结果集对象  
java.lang.String strCon; //数据库连接字符串  
java.lang.String strSQL; //SQL语句  
int intPageSize; //一页显示的记录数  
int intRowCount; //记录总数  
int intPageCount; //总页数  
int intPage; //待显示页码  
java.lang.String strPage;  
int i;  
//设置一页显示的记录数  
intPageSize = 2;  
//取得待显示页码  
strPage = request.getParameter("page");  
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据  
intPage = 1;  
}  
else{//将字符串转换成整型  
intPage = java.lang.Integer.parseInt(strPage);  
if(intPage<1) intPage = 1;  
}  
//装载JDBC驱动程序  
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());  
//设置数据库连接字符串  
strCon = "jdbc:oracle:thin:@linux:1521:ora4cweb";  
//连接数据库  
sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq");  
//创建一个可以滚动的只读的SQL语句对象  
sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);  
//准备SQL语句  
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;  
%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
<title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title>  
</head>  
<body>  
<table border="1" cellspacing="0" cellpadding="0">  
<tr>  
<th>姓名</th>  
<th>年龄</th>  
</tr>  
<%  
if(intPageCount>0){  
//将记录指针定位到待显示页的第一条记录上  
sqlRst.absolute((intPage-1) * intPageSize + 1);  
//显示数据  
i = 0;  
while(i<intPageSize && !sqlRst.isAfterLast()){  
%>  
<tr>  
<td><%=sqlRst.getString(1)%></td>  
<td><%=sqlRst.getString(2)%></td>  
</tr>  
<%  
sqlRst.next();  
i++;  
}  
}  
%>  
</table>  
第<%=intPage%& gt;页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a>& lt;%}%> <%if(intPage>1){%><a href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一页</a>& lt;%}%>  
</body>  
</html>  
<%  
//关闭结果集  
sqlRst.close();  
//关闭SQL语句对象  
sqlStmt.close();  
//关闭数据库  
sqlCon.close();  
%>  
<%@ page contentType="text/html;charset=8859_1" %>
<%
//变量声明
java.sql.Connection sqlCon; //数据库连接对象
java.sql.Statement sqlStmt; //SQL语句对象
java.sql.ResultSet sqlRst; //结果集对象
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
int i;
//设置一页显示的记录数
intPageSize = 2;
//取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
//装载JDBC驱动程序
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//设置数据库连接字符串
strCon = "jdbc:oracle:thin:@linux:1521:ora4cweb";
//连接数据库
sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq");
//创建一个可以滚动的只读的SQL语句对象
sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
//准备SQL语句
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;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){
%>
<tr>
<td><%=sqlRst.getString(1)%></td>
<td><%=sqlRst.getString(2)%></td>
</tr>
<%
sqlRst.next();
i++;
}
}
%>
</table>
第<%=intPage%& gt;页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a>& lt;%}%> <%if(intPage>1){%><a href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一页</a>& lt;%}%>
</body>
</html>
<%
//关闭结果集
sqlRst.close();
//关闭SQL语句对象
sqlStmt.close();
//关闭数据库
sqlCon.close();
%> 

其二:

view plaincopy to clipboardprint?
page是关键字,不能当变量。  
conn.jsp  
<%  
String sDBDriver = \"COM.ibm.db2.jdbc.app.DB2Driver\";  
String sConnStr = \"jdbc:db2:faq\";  
Connection conn = null;  
Statement stmt = null;  
ResultSet rs=null;  
try {  
Class.forName(sDBDriver);  
}  
catch(java.lang.ClassNotFoundException e) {  
out.print(\"faq(): \" + e.getMessage());  
}  
try{  
conn = DriverManager.getConnection(sConnStr,\"wsdemo\",\"wsdemo1\");  
stmt = conn.createStatement();  
}catch(SQLException e){  
out.print(e.toString());  
}  
%>  
query.jsp  
<%@ page language=\"java\" import=\"java.sql.*\" %>  
<%@ page contentType=\"text/html; charset=gb2312\" %>  
<%@ include file=\"conn.jsp\" %>  
<%  
......  
int pages=0;  
int pagesize=10;  
ResultSet result = null;  
ResultSet rcount = null;  
pages = new Integer(request.getParameter(\"pages\")).intValue();  
if (pages>0)  
{  
String sql=\" state=\'我不傻\'\";  
int count=0;  
try {  
rcount = stmt.executeQuery(\"SELECT count(id) as id from user where \"+sql);  
catch(SQLException ex) {  
out.print(\"aq.executeQuery: \" + ex.getMessage());  
}  
if(rcount.next())  
count = rcount.getInt(\"id\");  
rcount.close();  
if (count>0)  
{  
sql=\"select * from user where \"+sql;  
try {  
result = stmt.executeQuery(sql);  
}  
catch(SQLException ex) {  
out.print(\"aq.executeQuery: \" + ex.getMessage());  
}  
int i;  
String name;  
// result.first();  
// result.absolute((pages-1)*pagesize);  
// 此方法jdbc2.0支持。编译通过,但执行不过,不知是不是跟驱动有关,只好用下面的笨办法。  
for(i=1;i<=(pages-1)*pagesize;i++)  
result.next();  
for(i=1;i<=pagesize;i++) {  
if (result.next()) {  
name=result.getString(\"name\");  
out.print(name);  
}  
result.close();  
int n= (int)(count/pagesize);  
if (n*pagesize<count) n++;  
if (n>1)  
{for(i=1;i<=n;i++)  
out.print(\"<a href="query.jsp?pages=\" mce_href="query.jsp?pages=\""+i+\">\"+i+\" </a>\");  
}  
}  
}  
%>  
page是关键字,不能当变量。
conn.jsp
<%
String sDBDriver = \"COM.ibm.db2.jdbc.app.DB2Driver\";
String sConnStr = \"jdbc:db2:faq\";
Connection conn = null;
Statement stmt = null;
ResultSet rs=null;
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
out.print(\"faq(): \" + e.getMessage());
}
try{
conn = DriverManager.getConnection(sConnStr,\"wsdemo\",\"wsdemo1\");
stmt = conn.createStatement();
}catch(SQLException e){
out.print(e.toString());
}
%>
query.jsp
<%@ page language=\"java\" import=\"java.sql.*\" %>
<%@ page contentType=\"text/html; charset=gb2312\" %>
<%@ include file=\"conn.jsp\" %>
<%
......
int pages=0;
int pagesize=10;
ResultSet result = null;
ResultSet rcount = null;
pages = new Integer(request.getParameter(\"pages\")).intValue();
if (pages>0)
{
String sql=\" state=\'我不傻\'\";
int count=0;
try {
rcount = stmt.executeQuery(\"SELECT count(id) as id from user where \"+sql);
catch(SQLException ex) {
out.print(\"aq.executeQuery: \" + ex.getMessage());
}
if(rcount.next())
count = rcount.getInt(\"id\");
rcount.close();
if (count>0)
{
sql=\"select * from user where \"+sql;
try {
result = stmt.executeQuery(sql);
}
catch(SQLException ex) {
out.print(\"aq.executeQuery: \" + ex.getMessage());
}
int i;
String name;
// result.first();
// result.absolute((pages-1)*pagesize);
// 此方法jdbc2.0支持。编译通过,但执行不过,不知是不是跟驱动有关,只好用下面的笨办法。
for(i=1;i<=(pages-1)*pagesize;i++)
result.next();
for(i=1;i<=pagesize;i++) {
if (result.next()) {
name=result.getString(\"name\");
out.print(name);
}
result.close();
int n= (int)(count/pagesize);
if (n*pagesize<count) n++;
if (n>1)
{for(i=1;i<=n;i++)
out.print(\"<a href="query.jsp?pages=\" mce_href="query.jsp?pages=\""+i+\">\"+i+\" </a>\");
}
}
}
%> 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/softwave/archive/2009/06/20/4284312.aspx

相关推荐

    JSP通用分页 把数据实行分页

    本主题将探讨如何使用JSP实现通用的数据分页功能,这是一个非常实用的技术,尤其在处理大量数据时,可以提高网页加载速度并优化用户体验。 首先,我们需要理解分页的基本原理。分页是将数据库中的大量数据分成多个...

    经典struts2分页方法 JAVA_WEB必备分页 源码

    综上所述,经典Struts2分页方法涉及了Action、Model、DAO、结果映射、视图、拦截器、JSP/Freemarker标签库、URL参数、分页算法和最佳实践等多个方面。通过学习和实践这些知识点,Java Web开发者能够更好地理解和应用...

    JSP分页事例源代码

    总结,这个"JSP分页事例源代码"是一个综合性的示例,涵盖了Web开发中的核心概念,包括MVC模式、过滤器、监听器和分页算法,旨在提供一个通用的分页解决方案。通过学习和理解这个实例,开发者可以更好地掌握JSP开发...

    SSH集成+分页抽象类+自定义标签 == 分页数据效果

    `Page_Pro`可能是一个实现了分页功能的Java类或模块,包含了具体的分页算法和接口调用。 总的来说,本项目通过SSH框架的集成,实现了高效的后端业务处理。通过创建分页抽象类,我们优化了代码结构,提高了代码复用...

    java开源包4

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包3

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包6

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包9

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包101

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包5

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包8

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包10

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    通用的jsp翻页工具类

    本文将详细介绍一个通用的JSP翻页工具类的实现原理与使用方法。 #### 一、工具类概述 `PageUtil` 类是用于生成翻页导航条的工具类。其主要功能是在给定总记录数、总页数、当前页、每页显示记录数以及翻页链接的...

    java开源包1

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    Java资源包01

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    基于Java的Web通用DataTable组件设计.zip

    - **性能优化**:通过缓存策略、分页算法优化,减少不必要的数据库查询。 - **国际化支持**:提供多语言版本,满足全球化需求。 - **插件系统**:设计插件体系,方便扩展组件功能,如导出Excel、图表可视化等。 ...

    简单时尚无聊通用OA系统源码

    【简单时尚无聊通用OA系统源码】是一款基于MVC架构设计的办公自动化(OA)系统,主要用于提升企业内部的工作流程管理、文档共享和协作效率。该系统采用了多种经典的Java技术,包括JSP、Servlet、JavaBeans、JSTL、EL...

    java开源包2

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包11

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包7

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

Global site tag (gtag.js) - Google Analytics