使用SQL语句实现 大型结果集 的分页(测试).
一般使用JSP处理结果集的分页时,都是返回一个“可滚动”的ResultSet,然后在JSP中进行遍历。而如果返回的ResultSet是巨型的,EP:返回的记录条数有1万条----这时,更好的方法就是采用Iterator模式 来进行分页的管理。
有没有更直接的方式?
用google搜了一通,发现几篇比较有意思的文章,都是讲 ASP+数据库存储过程 实现大数据量的分页。既然ASP能实现,JSP也应该能!结合了其它的一些资料,发现只要组织好你的SQL查询语句,就能非常轻松的对大型结果集进行简单、有效的分页。
使用SQL分页的一个问题就是“记录条数、页码、页数”的计算-为了解决了这个问题,我使用了select count(*) .. 这样做的结果就是每次分页就要对数据库进行2次查询操作,不过,为了实现“简单”分页操作,也值了!
在这里,为了说明运作原理,我没有对处理逻辑进行封装,直接在HTML中嵌入JAVA代码,显得有点乱,各位看官将就一下 :)
主要就是对SQL查询语句的包装,为了实现分页,每种数据库的实现方式不同,我使用的是 SQL Server2000,就使用了 top 来限制返回记录的条数- 而Mysql有limit- Oracle及其它数据库亦有相对应的函数。
代码:sql.jsp
有没有更直接的方式?
用google搜了一通,发现几篇比较有意思的文章,都是讲 ASP+数据库存储过程 实现大数据量的分页。既然ASP能实现,JSP也应该能!结合了其它的一些资料,发现只要组织好你的SQL查询语句,就能非常轻松的对大型结果集进行简单、有效的分页。
使用SQL分页的一个问题就是“记录条数、页码、页数”的计算-为了解决了这个问题,我使用了select count(*) .. 这样做的结果就是每次分页就要对数据库进行2次查询操作,不过,为了实现“简单”分页操作,也值了!
在这里,为了说明运作原理,我没有对处理逻辑进行封装,直接在HTML中嵌入JAVA代码,显得有点乱,各位看官将就一下 :)
主要就是对SQL查询语句的包装,为了实现分页,每种数据库的实现方式不同,我使用的是 SQL Server2000,就使用了 top 来限制返回记录的条数- 而Mysql有limit- Oracle及其它数据库亦有相对应的函数。
代码:sql.jsp
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="com.panabia.db.SQLFactory"%>
<%@page import="java.sql.*"%>
<html><link rel=stylesheet href=/images/css.css>
<body>
<font size=6 face=arial>SQL语句分页测试程式[SQL Server 2000]</font>
<hr>
<%
String topage=request.getParameter("topage");
int currentpage=1;
int totalpage=0;
if(topage!=null&&!topage.equals("")){
try{
currentpage=Integer.parseInt(topage);
}
catch(NumberFormatException e){currentpage=1;}
}
Connection con=null;
Statement sql=null;
ResultSet rs=null;
SQLFactory SQL=new SQLFactory();
try{
con=SQL.gainConnection();
sql=con.createStatement();
rs=sql.executeQuery("select count(id) from users");
if(rs.next()){
totalpage=rs.getInt(1);
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
SQL.releaseConnection(rs,null,sql,con);
}
%>
<font class=normal>共有 <b><%=totalpage%></b> 条记录,
分为 <b><%=totalpage%6==0?totalpage/6:totalpage/6+1%> </b>页,
目前显示第 <b><%=currentpage%></b> 页.</font>
<hr color=#eeeeee>
<%
String s="select top 6 * from users where id not in(select top "+
6*(currentpage-1)+" id from users order by id) order by id";
try{
con=SQL.gainConnection();
sql=con.createStatement();
rs=sql.executeQuery(s);
while(rs.next()){
%>
<font class=big>
<%=rs.getInt(1)%>--<%=rs.getString(2)%>--<%=rs.getString(3)%></font>
<%
}
}
catch(SQLException e){}
finally{
SQL.releaseConnection(rs,null,sql,con);
}
%>
<hr>
<a class=slink href="sql.jsp?topage=<%=1%>"><首 页></a>
<a class=slink href="sql.jsp?topage=<%=currentpage-1%>"><上一页></a>
<a class=slink href="sql.jsp?topage=<%=currentpage+1%>"><下一页></a>
<a class=slink href="sql.jsp?topage=<%=totalpage%6==0?totalpage/6:totalpage/6+1%>"><尾 页></a>
</body>
</html>
meiking
2004-11-22 17:31:23
评论:2
阅读:2661
引用:0
不清楚
@2007-10-20 11:44:58 李
com.panabia.db.SQLFactory
怎么正确使用
怎么正确使用
test [code]
@2004-11-22 17:35:52 meiking
还以为可以用[code=java]java code[/code]或者[code=C]C code[/code]呢!
