select top 每页记录数 * from 表名 where 主键列 > (select max(主键列) from (select top ((要查询的页数-1)*每页记录数) 主键列 from 表名 order by 主键列) as T) order by 主键列 select top 10 * from song where iSongId > (select max(iSongId) from (select top ((3-1)*10) iSongId from song order by iSongId) as T) order by iSongId
select top 每页记录数 * from 表名 where 主键列 > (select max(主键列) from (select top ((要查询的页数-1)*每页记录数) 主键列 from 表名 order by 主键列) as T) order by 主键列 ------------------------------------ 主键列) as T) 楼主这个"T"是什么意思啊?
Method one: 每次取出需要显示的记录数 比如说20条,Oracle 实现:
SELECT * FROM (SELECT ROWNUM AS NUM,查询字段... WHERE 1=1 AND ....查询条件 AND ROWNUM <= 当前页 * 页面显示数据量) WHERE NUM > (当前页-1)*页面数据量 Method two: 一次取出需要的数据(需要对记录限制),然后保存会话中,然后在一页一页显示 参考实现可以查看 extremeTable 标签库方法一方便显示海量数据,可能缺陷:数据超大时,翻页可能很慢,排序过滤比较难 方法二方便显示小量数据,耗内存,翻页快,排序、过滤非常方便,具体参见extremeTable标签
niitlxr(NIITLXR) 正解! ===============rownum 不是vs2005 的 而是Oracel数据库查询的,他代替了sql的order by 排序 支持,学习.......
-------------------------------------
sql = "select * from (select rownum as my_rownum,
table_a.* from (" + sql0 + ") table_a where
rownnum <" + nEndBeginRecNum + ") where my_rownum >=" + nBeginRecNum;其中:
sql0为原始的sql语句,可以进行排序操作
nBeginRecNum,nEndRecNum为起始和终止记录号。
-------------------------------------
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %><%@ taglib uri="/WEB-INF/newxy-html.tld" prefix="nhtml"%>
<%@ taglib uri="/WEB-INF/newxy-logic.tld" prefix="nlogic"%>
<%@ taglib uri="/WEB-INF/newxy-bean.tld" prefix="nbean"%><nhtml:javascripts/>
<nhtml:stylesheets/><nbean:formBean name="industry" sql="select * from industry"/>
<logic:present name="industry">
<logic:notEmpty name="industry" property="_coll">
<div align="center" style="font-size:14px"><b>== 行 业 ==</b></div>
<div><nlogic:navigate formName="industry" length="20"/></div>
<table>
<nlogic:iterate id="rec" name="industry" property="_coll">
<nhtml:TR >
<td style="font-size:14px;color:#000088;cursor:hand">
<bean:write name="rec" property="code"/>
<bean:write name="rec" property="industry"/>
</td>
</nhtml:TR>
</nlogic:iterate>
</table>
</logic:notEmpty>
</logic:present>每页显示20条行业代码及行业信息,默认为25条。来自:http://www.newxy.net/zh_cn/articles/pagination.jsp
where 主键列 > (select max(主键列) from (select top ((要查询的页数-1)*每页记录数) 主键列 from 表名 order by 主键列) as T)
order by 主键列
select top 10 * from song
where iSongId > (select max(iSongId) from (select top ((3-1)*10) iSongId from song order by iSongId) as T)
order by iSongId
where 主键列 > (select max(主键列) from (select top ((要查询的页数-1)*每页记录数) 主键列 from 表名 order by 主键列) as T)
order by 主键列
------------------------------------
主键列) as T) 楼主这个"T"是什么意思啊?
每次取出需要显示的记录数 比如说20条,Oracle 实现:
SELECT * FROM (SELECT ROWNUM AS NUM,查询字段... WHERE 1=1 AND ....查询条件
AND ROWNUM <= 当前页 * 页面显示数据量) WHERE NUM > (当前页-1)*页面数据量
Method two:
一次取出需要的数据(需要对记录限制),然后保存会话中,然后在一页一页显示
参考实现可以查看 extremeTable 标签库方法一方便显示海量数据,可能缺陷:数据超大时,翻页可能很慢,排序过滤比较难
方法二方便显示小量数据,耗内存,翻页快,排序、过滤非常方便,具体参见extremeTable标签
===============rownum 不是vs2005 的 而是Oracel数据库查询的,他代替了sql的order by 排序
支持,学习.......
谁对java的分页比较熟悉?
要求遍历一个表的数据,然后从另一个表中提取条件筛选出合适的列出来,分页显示,现在我用的方法不能筛选,只能显示全部的。我是web开发,java执行程序,jsp做显示页面
<%@page contentType="text/html; charset=GBK"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<input type="hidden" name="currentPage" value="${currentPage}">
<script type="text/javascript">
var pagingFormName="${param.formName}";
function firstPage(){
goPage(1);
}
function previousPage(){
goPage(parseInt(document.forms(pagingFormName).currentPage.value)-1);
}
function nextPage(){
goPage(parseInt(document.forms[pagingFormName].currentPage.value)+1);
}
function endPage(){
goPage(${pages});
}
function goPage(index){
var form=document.forms[pagingFormName];
form.currentPage.value=index;
form.submit();
}
</script>
<table>
<tr>
<td>共${amount}条记录</td>
<td>共${pages}页</td>
<td>当前是第${currentPage}页</td>
<c:if test="${currentPage > 1}">
<td><a href="javascript:firstPage()">首页</a></td>
<td><a href="javascript:previousPage()">前一页</a></td>
</c:if>
<c:if test="${currentPage < pages}">
<td><a href="javascript:nextPage()">后一页</a></td>
<td><a href="javascript:endPage()">尾页</a></td>
</c:if>
</tr>
</table>后台处理程序需要将以下几个变量存入request中(可写成一个固定的方法) public class PagingUtils{ /**
* 默认当前为第几页的变量名
*/
public static final String CURRENT_PAGE_NAME = "currentPage" ; /**
* 默认每一页最大数据量变量名
*/
public static final String PAGE_SIZE_NAME = "pageSize" ; /**
* 默认总记录数变量名
*/
public static final String AMOUNT_NAME = "amount" ; /**
* 默认总页数变量名
*/
public static final String PAGES_NAME = "pages" ; public static PagingData init(HttpServletRequest request){
//在这里初始化一个PagingData对象
}
public static void save(HttpServletRequest request,PagingData data){
//在这里将PagingData对象中的数据存入request
}
}public class PagingData
implements Serializable
{
/**
* 分页后查询到的数据.
*/
private List data = new ArrayList () ; /**
* 总记录数
*/
private int amount = 0 ; /**
* 总页数
*/
private int pages = 1 ; /**
* 当前为第几页
*/
private int currentPage ; /**
* 每一页的数据量
*/
private int pageSize ; /**
* 构造分页数据实体
* @param pageSize int 每一页的数据量
* @param currentPage int 当前为第几页
*/
public PagingData ( int pageSize , int currentPage )
{
this.pageSize = pageSize ;
this.currentPage = currentPage ;
} /**
* 分页后查询到的数据
* @return List
*/
public List getData ()
{
return data ;
} /**
* 总记录数
* @return int
*/
public int getAmount ()
{
return amount ;
} /**
* 总页数
* @return int
*/
public int getPages ()
{
return pages ;
} /**
* 当前为第几页
* @return int
*/
public int getCurrentPage ()
{
return currentPage ;
} /**
* 每一页的数据量
* @return int
*/
public int getPageSize ()
{
return pageSize ;
} /**
* 查询到的数据量
* @return int
*/
public int getCurrentAmount ()
{
return data.size () ;
} /**
* 设定总记录数
* @param amount int
*/
public void setAmount ( int amount )
{
this.amount = amount ;
if ( amount > 0 )
{
int k = amount % pageSize ;
pages = ( k == 0 ) ? amount / pageSize :
( ( amount - k ) / pageSize ) + 1 ;
}
} /**
* 设定查询到的数据
* @param data List 查询到的数据
*/
public void setData ( List data )
{
this.data = data ;
}
}
在处理分页的程序中调用PagingUtils类的方法就行了
在分页的jsp中:
<jsp:include file="paing.jsp?formName=myForm"/>此行必须写在一个Form中
需要时改动上面的分页jsp文件就行