to fanqingfeng(丰丰) 数据量大小当然是真正的原因你说的分页SQL: select top " + pagesize + " * where " ID<(select min(ID) from (select top " + pagesize * (page - 1) + " ID from "+table+" order by CNID desc) as c) order by ID desc";判断 ID<...这个条件耗费的时间当然和数据库大小成正比!
/*功能:接收参数组织SQL语句 *str_table :分页显示的表名 *str_where:分页的where条件 *httpfile :具体jsp文件 *pages :获取地址栏传过来的pages参数 */ public ResultSet setQuerysql(String strWhat,String str_table,String str_where, String strOrder,String httpfile,String pages)throws SQLException { 刚才的代码中 使用这个就是了 这个是经具体需求改了一下 你可以稍做修改 如我们使用的是 turnPage A=new turnPage(); A.setPage(10);//每页显示数目 ResultSet B=A.setQuerysql("*","ABC","where a=1","order by id desc","asdc.jsp","2")//则显示第二页其中觉得多余的地方就是 传递 * 因为select * from ABC where a=1 order by id desc 代码运行是成功的 而且封装起来后使用很方便 由于我们对实际需要做了增加修改 所以会变得有点复杂 不过相信你明白代码意思的
to:回复人: lndlzcy(落日弓) to fanqingfeng(丰丰) 数据量大小当然是真正的原因你说的分页SQL: select top " + pagesize + " * where " ID<(select min(ID) from (select top " + pagesize * (page - 1) + " ID from "+table+" order by CNID desc) as c) order by ID desc";判断 ID<...这个条件耗费的时间当然和数据库大小成正比! 你上面的SQL语句不是科学的分页 :)
* <p>Title: 分页程序</p>
* <p>Description: 根据条件分页显示</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: 广东有限公司</p>
* @author 网络信息部 庆丰
* @version 1.0
*/
package erp.com;import java.sql.*;
import java.io.*;
import erp.db.*;
public class turnPage extends Object implements java.io.Serializable {ResultSet CountTopicrs=null;//初始化总记录数Rs变量
ResultSet Pagirs=null;//初始化分页时每页的记录集数Rs变量private int intCountTopic=0;//主题总数,即select选出的、库中所有记录总数
public int intPageSize;//每页显示主题数,即每页显示的记录总数
public int intPageCount;//总页数
public int intPage=0; //当前页数
private String Countsql=null,Pagisql=null,str=null,str_where=null;
private String str_parameter="";
private String nowPage;//初始化当前页intPage变量,以准确便获取当前页,即获取当前页的具体页号。
private String HttpFile;//当前的地址栏的文件,即具体jsp文件。//Linkdb db = new Linkdb();//连接数据库//接收传分页参数public void ProductPage(){}
public void setPages(int n)
{
intPageSize = n;
} /*功能:接收参数组织SQL语句
*str_table :分页显示的表名
*str_where:分页的where条件
*httpfile :具体jsp文件
*pages :获取地址栏传过来的pages参数
*/
public ResultSet setQuerysql(String strWhat,String str_table,String str_where, String strOrder,String httpfile,String pages)throws SQLException
{
ResultSet r=null;
this.nowPage=pages;
this.HttpFile=httpfile;//分页文件名
Countsql="select count(*) from "+str_table+" "+str_where;
Pagisql="select "+strWhat+" from "+str_table+" "+str_where+" "+strOrder;
try{
r=querySql(Countsql,Pagisql);
}catch(SQLException _ex)
{System.out.println(_ex);}
return r;
} /*功能:接收参数进行首尾页判断
*Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
*Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
*request :参数传递过程中的变量。[用来控制翻页时的pages变量]
*/
public ResultSet querySql(String Countsql,String Pagisql)//,HttpServletRequest request
throws SQLException{
//获取当前文件名。
//HttpFile=request.getRequestURI();
//获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
//nowPage=request.getParameter("pages");//由参数HttpServletRequest request传递而来if (nowPage==null)
{ intPage=1; }
else
{
intPage=Integer.parseInt(nowPage);
if (intPage<1)
intPage=1;
}//end else//获取总记录数的结果集。
Connection con=null;
Conn conn=new Conn();
con=conn.getConn();
ResultSet Pagirs=null;
//System.out.print("翻页获取"+con);
// System.out.print("翻页获取"+con.getAutoCommit());
try
{ Statement statement=con.createStatement();
ResultSet CountTopicrs=statement.executeQuery(Countsql);
if (CountTopicrs.next())
{
intCountTopic=CountTopicrs.getInt(1);//获取第一个字段的整型
}
//获取总页数。
intPageCount = (intCountTopic+intPageSize-1)/intPageSize;
//如果当前页大于总页数,则当前页等于总页数。//=最后一页
if (intPage>intPageCount)
{
intPage=intPageCount;
}
//关闭总主题数的数据集。
CountTopicrs.close();
//获取执行分页的结果集。
Pagirs=statement.executeQuery(Pagisql);
//System.out.print("翻页try");
}//try
catch(Exception e)
{
System.out.println(e.getMessage());
Pagirs=null;
//System.out.print("翻页catch"); //return null;
} //catch
finally{
conn.FreeConn();
//System.out.print("翻页释放"+con);
//System.out.print("翻页"+Pagirs);
return Pagirs;
}
}//end querySql function.//获取记录总数。
public int getCountTopic()
{
return intCountTopic;
}//获取总页数。
public int getPageCount()
{
return intPageCount;
}//获取当前页数。
public int getIntPage()
{
return intPage;
}//设置分页参数
public void setPfoot(String str)
{
this.str_parameter+=str;
}//分页栏函数
public String PageFooter() {
String str = "";
int next, prev;
prev=intPage-1;
next=intPage+1;
str +="<font style='font-size: 9pt'>总计<font color='red'>"+getCountTopic()+"</font>条记录,"+"共<font color='red'>"+getPageCount()+"</font>页";
str +="当前第<font color='red'>"+getIntPage()+"</font>页 ";//getIntPage()*intPageSize
if(intPage>1)
str += " <A href=" + HttpFile + "?pages=1"+str_parameter+">第一页</A> ";
else str += " 第一页 "; if(intPage>1)
str += " <A href=" + HttpFile + "?pages=" + prev +str_parameter+ ">上一页</A> ";
else str += " 上一页 "; if(intPage<intPageCount)
str += " <A href=" + HttpFile + "?pages=" + next +str_parameter+ ">下一页</A> ";
else str += " 下一页 "; if(intPageCount>1&&intPage!=intPageCount)
str += " <A href=" + HttpFile + "?pages=" + intPageCount +str_parameter+ ">最后页</A>";
else str += " 最后页 </font>";
str +=" 转到<select name='pages'>";
for(int i=1;i<=getPageCount();i++)
{
if(getIntPage()==i)
str += " <option value='"+i+"' selected>"+i+"</option>";
else str += " <option value='"+i+"' >"+i+"</option>";
}
str +=" </select>页";
str +=" <input type='submit' name='Submit' value='跳转' class='button''>";
return str;
}public void closeConn()
{
//db.closeConn();
}} //end.
不用这么麻烦吧
----------------------------------------------
我也不想这么麻烦的...请看下这个帖子:
http://community.csdn.net/Expert/topic/3461/3461840.xml?temp=.9056055
所以才这么做的....----------------------------------------------
这么问吧,比如我在servlet中得到了一个结果集,怎么做才能分页?(考虑数据量较大的情况!)
Vector myVec=new Vector();
HashMap columnData=null;
for(int i=0;i<myVec.size();i++) {
if(!columnData.isEmpty()) columnData.clear();
columnData=(HashMap)myVec.get(i); for(j=0;j<columnData.size();j++)
{
String data=(String)columnData.get("字段名");
if(data==null) data="";
}
}你在修改一下。
其实分页的原理是这样的
加入数据库中有100条记录 你想分页 每页显示10条
那么你选择第1页的话 就是将1-9的记录保存在结果集中
同理 如果选择第5页的话 就是将 40-49的记录保存到结果集中
将这个数据集显示出来 就是显示第5页的内容了所以数据量的大小不是真正的原因,而每页显示的数目才是决定数据处理显示的关键---------------------------------哦,那具体的做法呢?
select top " + pagesize + " * where " ID<(select min(ID) from (select top " +
pagesize * (page - 1) + " ID from "+table+" order by CNID desc) as c) order by ID desc";判断 ID<...这个条件耗费的时间当然和数据库大小成正比!
如果你用sqlserver数据库,直接用select * from table limit 0,10;这样可以取出来前11条记录
------------------------
是SQLSERVER哦...记下了,但是结果集是怎么传到JSP页面的?也是放到session中么?
*str_table :分页显示的表名
*str_where:分页的where条件
*httpfile :具体jsp文件
*pages :获取地址栏传过来的pages参数
*/
public ResultSet setQuerysql(String strWhat,String str_table,String str_where, String strOrder,String httpfile,String pages)throws SQLException
{
刚才的代码中 使用这个就是了 这个是经具体需求改了一下
你可以稍做修改
如我们使用的是
turnPage A=new turnPage();
A.setPage(10);//每页显示数目
ResultSet B=A.setQuerysql("*","ABC","where a=1","order by id desc","asdc.jsp","2")//则显示第二页其中觉得多余的地方就是 传递 *
因为select * from ABC where a=1 order by id desc 代码运行是成功的 而且封装起来后使用很方便
由于我们对实际需要做了增加修改 所以会变得有点复杂 不过相信你明白代码意思的
to fanqingfeng(丰丰) 数据量大小当然是真正的原因你说的分页SQL:
select top " + pagesize + " * where " ID<(select min(ID) from (select top " +
pagesize * (page - 1) + " ID from "+table+" order by CNID desc) as c) order by ID desc";判断 ID<...这个条件耗费的时间当然和数据库大小成正比! 你上面的SQL语句不是科学的分页 :)