|
写了一个分页的bean,是应和搜索引擎来写的,把分页结构倒置了,有兴趣的朋友可以来指点一下
package eng.xqsh;
import java.lang.*;
import java.sql.*;
import java.util.Iterator;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
/*
外部调用顺序:
1、setRows(50);//设置每页显示记录录
2、getPages((int)总记录数);//求出总页数
3、strPage(request,"传递当前页数变量名字符传");//主要是初始当前页数
4、利用其他类得到ResultSet
5、getPageSet(ResultSet,当前页数,记录总数);//得到处理后的ResultSet
6、循环输出结果
7、out(每组的页数,“引入本类的页名”);//得到分页表格字符串
*/
public class PageAction
{
int nowFirst=0;//当页记录开始数
int nowLast=0; //当页记录结束数
private String strPage;
private int curPages;
private int m_rows;
private int pages;
public PageAction()
{
strPage = null;
}
public String strPage(HttpServletRequest request, String page)
{
strPage = request.getParameter(page);
return strPage;
}
public int curPages(String strPage)
{
if(strPage == null)
{
curPages = pages;
}
else
{
curPages = Integer.parseInt(strPage);
if(curPages < 1)
curPages = 1;
}
curPages=(pages-curPages+1);
return curPages;
}
public void setRows(int rows)
{
m_rows = rows;
}
public int getPages(int rowcounts)
{
int test = rowcounts % m_rows;
if(test == 0)
pages = rowcounts / m_rows;
else
pages = rowcounts / m_rows + 1;
return pages;
}
public int getStr(int curPages,int sum)
{
nowLast =(int)(((double)curPages/pages)*sum);
nowFirst=nowLast-m_rows+1;
return nowFirst;
}
public int getLast(int curPages,int sum)
{
nowLast =(int)(((double)curPages/pages)*sum);
return nowLast;
}
public ResultSet getPageSet(java.sql.ResultSet rs, int curPages,int sum)
{
Vector vector = new Vector();
nowLast =(int)(((double)curPages/pages)*sum);
nowFirst=nowLast-m_rows+1;
//移动指针到当页记录开始数
for(int i=0;i<nowFirst;i++)
{
try
{
rs.next();
}
catch(SQLException e)
{
System.out.println("NewsList:getPageSet:rs.next:"+e.getMessage());
}
}
return rs;
}
public String out(int groups,String pageName)
{
int mark=0; //该组显示的页码
int groupSum=0; //总的组数
int curGroup; //当前组数
String xs=null;
if(pages%groups==0)
groupSum=pages/groups;
else
groupSum=pages/groups+1;
if(curPages%groups==0)
curGroup=curPages/groups;
else
curGroup=curPages/groups+1;
if(curGroup<1)
curGroup=1;
xs="<table width='100%' height='19' border='0' align='center' cellpadding='0' cellspacing='1'>";
xs=xs+"<tr><td width='120' valign='bottom'>";
if(pages>1)
{
xs=xs+"curPage:"+(pages-curPages+1)+"/"+pages;
}
else
{
xs=xs+"1/1";
}
xs=xs+"<td align='right' valign='bottom'>";
if((curGroup-1)*groups-1>0)
{
xs=xs+"<a href="http://www.blog.com.cn/+pageName+"page="+(pages-(curGroup-1)*groups+1)+"><<<</a>";
}
for(int i=1;i<groups+1;i++)
{
mark = (curGroup-1)*groups+i;
if(mark>pages)
break;
if(mark==curPages)
{
xs=xs+"<span style='font-size:11pt; font-weight: bold;'>"+(pages-mark+1)+"</span>";
}
else
{
xs=xs+"<a href="http://www.blog.com.cn/+pageName+"page="+(pages-mark+1)+">["+(pages-mark+1)+"]</a>";
}
}
if((curGroup*groups+1)<pages)
{
xs=xs+"<a href="http://www.blog.com.cn/+pageName+"page="+(pages-curGroup*groups)+">>>>></a>";
}
xs=xs+"</td></tr></table>";
return xs;
}
}
下面是分页的存储过程,mssql的
CREATE PROCEDURE [dbo].[PageAction]
@pagesize int,
@first int,
@table varchar(100),
@id varchar(50),
@clonum varchar(200)
AS
DECLARE @sql nVARCHAR(4000)
declare @intTop int
set @intTop=@pagesize
set @sql='select top '+str(@intTop)+' '+ @clonum +' from '+@table+ ' where '+@id+' <= (select min('+@id+') from (select top '+str(@first)+' '+ @id+' from '+@table+' order by '+@id+' desc)as aaa)order by '+@id+ ' desc'
--select @sql
exec (@sql)
GO
下面是带条件分页的存储过程
CREATE PROCEDURE [dbo].[offer_search_xqsh]
@pagesize int,
@first int,
@table varchar(50),
@id varchar(10),
@clonum varchar(200),
@where varchar(2000)
AS
DECLARE @sql nVARCHAR(4000)
declare @intTop int
set @intTop=@pagesize
set @sql='select top '+str(@intTop)+' '+ @clonum +' from (select '+@clonum+' from '+@table+' where '+@where+' )as bbb where ' +@id+' <= (select min('+@id+') from (select top '+str(@first)+' '+ @id+' from '+@table+' where '+@where+' order by '+@id+' desc)as aaa) order by '+@id+ ' desc'
--select @sql
exec (@sql)
GO |
|