存储过程:create Procedure pname
( @pageIndex int,@pageSize)
as
select from tableName order by id
offset @pageIndex pageSize fetch next pageSize rows only
分页:
sqlserver 在2008之前 使用 top 和 not int top 的方式来做分页
2008以后使用 row_number() 函数作为分页关键函数
2012使用 offset 1 fetch next 10 rows only
你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入
给你一个非缓存分页类的简单例子吧(Page类可以视作javabean):
/
@author Administrator
TODO 要更改此生成的类型注释的模板,请转至
窗口 - 首选项 - Java - 代码样式 - 代码模板
/
import javautil;
public class Pager {
private String PageUrl;
private boolean hasNext;
private boolean hasPrevious;
private String previousPage;
private String nextPage;
private int offset;
private int size;
private int length;
private int pagenumber;
public Pager(int offset,int length, int size, String url){
thisoffset=offset;
thislength=length;
thissize=size;
int index=urlindexOf("&pageroffset");
if (index>-1){
thisPageUrl=urlsubstring(0,index);
}else{
thisPageUrl=url;
}
}
public void setoffset(int offset){
thisoffset=offset;
}
public void setPagerUrl(String PagerUrl){
thisPageUrl=PagerUrl;
}
public void setsize(int size){
thissize=size;
}
public void setlength(int length){
thislength=length;
}
public int getoffset(){
return thisoffset;
}
public String getPageUrl(){
return thisPageUrl;
}
public boolean gethasNext(){
if((offset+1)length>=size){
hasNext=false;
}else{
hasNext=true;
}
return hasNext;
}
public boolean gethasPrevious(){
if(offset>=1){
thishasPrevious=true;
}else{
thishasPrevious=false;
}
return hasPrevious;
}
public String getpreviousPage(){
thispreviousPage="";
if (thisgethasPrevious()){
thispreviousPage=thisPageUrl+"&pageroffset="+(offset-1);
}
return previousPage;
}
public String getnextPage(){
thisnextPage="";
if(thisgethasNext()){
thisnextPage=thisPageUrl+"&pageroffset="+(offset+1);
}
return thisnextPage;
}
public int getpagenumber(){
float temppn=(float)size/(float)length;
pagenumber=new Float(temppn)intValue();
if (temppn>pagenumber){
thispagenumber++;
}
return thispagenumber;
}
public static ArrayList FindPageList(int offset,int length,List list){
ArrayList alist=new ArrayList();
for(int i=offsetlength; i<(offsetlength+length)&&i<listsize();i++){
alistadd(listget(i));
}
return alist;
}
}
具体使用:
1、在servlet初始化这个page
List list=DataUtilgetSpecifiedList();//得到整个数据列表
int offset=0;//便宜量
int length=10;//每页数据记录数
String pageOffset=requestgetParameter("pageroffset");
if(pageOffset==null||pageOffsetequals("")){
offset=0;
}else{
offset=IntegerparseInt(pageOffset);
}
String Url=requestgetRequestURL()toString()+""+requestgetQueryString();
Pager pager=new Pager(offset,length,listsize(),Url);
List RsList=PagerFindPageList(offset,length,list);
requestsetAttribute("Pager",pager);
requestsetAttribute("List",RsList);
RequestDispatcher dispatcher= requestgetRequestDispatcher("/UI/someModule/list_displayjsp");
dispatcherforward(request,response);
2、具体jsp中得到分页结果,并显示,并附页面跳转部分:
页面中得到分页结果
<%
List RpList=(List)requestgetAttribute("List");
Pager pager=(Pager)requestgetAttribute("Pager");
%>
<%--用for循环把RpList显示--%>
<!--页面跳转代码,这只是个形式,简化和改变方式的余地很大-->
<form name="pageForm"><%if(pagergethasPrevious()){%><a href="<%= pagergetpreviousPage()%>">prev</a>
<%}%>
<%if( pagergethasNext()){%><a href="<%=pagergetnextPage()%>">next</a><%}%><%if(pagergetpagenumber()>1) {%>第<select name="pager" onchange="windowlocation='<%=pagergetPageUrl()%>&pageroffset='+documentpageFormpagerselectedIndex;"><%for(int i=0;i<pagergetpagenumber();i++){%><option value=<%=i%> <%if(pagergetoffset()==i){ %>selected<%}%>><%=(i+1)%></option><%}%></select>页<%}%> 共<%=pagergetpagenumber()%>页</form>
ps:1、2两部分可以都放在页面类,不过你好像要MVC,所以给你这个代码。
是否可以解决您的问题?
1、新建模板
新建模板mutipagecpt,为了加快展示速度,我们可以使用分页查询,获取每个产品的详细信息并计算产品对应的订单中的应付金额,因此添加数据集时查询SQL语句为select 产品产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品单价, 产品库存量, 产品订购量,sum(应付金额) as 应付款项 from 产品,订单,订单明细 where 产品产品ID=订单明细产品ID and 订单明细订单ID=订单订单ID and 产品产品ID between 10(${page}-1)+1 and 10${page} group by 产品产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品单价, 产品库存量, 产品订购量 order by 产品产品ID,设置参数page的默认值为1,首次看到的是第一页,只查询出第1~20条记录;若page参数为2时,查询出第21~40条记录,即第二页内容。
2、自定义上一页、下一页按钮
在单元格中求出上一页、下一页页码的值
自定义上、下一页按钮
点击模板>模板web属性>分页预览设置,选择为该模板单独设置,在工具栏中增加两个自定义按钮分别命名为上一页,下一页,是工具栏上只剩下如下图所示几个按钮。
3、第一页与最后一页处理
求出总页数
双击总数所在单元格d出数据列设置对话框,选择高级>自定义显示,在自定义中填入公式:roundup($$$/10,0)求出总页数。
将第一行的行高设置为0,或者是隐藏:
上一页按钮设置:选中上一页自定义按钮,点击自定义JavaScript,在js中填入
var page= $("tr[tridx=0]","divcontent-container")children()eq(0)html();if(page==0)//如果报表显示第一页,则上一页不可用
thissetEnable(false);
else
windowlocationhref="${servletURL}reportlet=doc/Advanced/multipagecpt&page="+page;
下一页按钮设置与上一页的js差不多,只需要获取B1的值就可以了,所以在js中填入
var page= $("tr[tridx=0]","divcontent-container")children()eq(1)html();var total=$("tr[tridx=0]","divcontent-container")children()eq(2)html();
if(parseInt(page) > parseInt(total))//如果报表显示最后一页,则下一页不可用
{
thissetEnable(false);
}
else
windowlocationhref="${servletURL}reportlet=doc/Advanced/multipagecpt&page="+page;
分页预览即可查看效果
以上就是关于SQLServer数据库存储过程分页是怎样的全部的内容,包括:SQLServer数据库存储过程分页是怎样的、(JAVA)从数据库查出所有数据再分页的方法、有没有方法使FineReport进行假分页,分页让数据库进行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)