[返回首页] - [索引页面] - [文章列表]


主题:mssqlserver的jsp分页



帮忙看看这种分页速度还行不?有没有啥bug?谢谢!
<%
int i;
int ipage=5; //分頁單位
int allpage; //總頁數
int pages; //接受的頁碼變數
int cpage=1; //當前頁
int spage; //開始頁
int allCol=0;
Vector v=null;
//資料庫連接聲明
Connection conn=null;
java.lang.String sql,pagesql;
java.sql.ResultSet rs,pagers;
Statement statement=null;
String kmsdb="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=DBName";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn = DriverManager.getConnection(kmsdb, "user", "pwd");

pagesql = "SELECT COUNT(*) FROM Authors";
//取總文章數
statement = conn.createStatement();
pagers = statement.executeQuery(pagesql);
while(pagers.next())
{
allCol = pagers.getInt(1);
System.out.println(allCol);
}

//獲得總頁面數
allpage = (int)Math.ceil((allCol + ipage-1) / ipage);
//判斷參數pages是否空
if (request.getParameter("pages")==null) {
pages=1;
} else {
pages = new Integer(request.getParameter("pages")).intValue();
System.out.println(pages);
}
//判斷當前頁
if(pages > allpage || pages == 0)
{cpage = 1;}
else
{
cpage = pages;
}
//判斷起始頁
sql = "select Top "+ipage+" au_id,au_lname,au_fname,address,phone from authors where au_id not in (select top "+(cpage-1)*ipage+" au_id from authors order by au_id desc)order by au_id desc";
rs = statement.executeQuery(sql);
while (rs.next())
{
au_id=rs.getString("au_id");
au_lname=rs.getString("au_lname");
au_fname=rs.getString("au_fname");
phone=rs.getString("phone");
address=rs.getString("address");
%>
<td width="300"><%= au_id %></a></td>
<td width="300"><%= au_lname %></a></td>
<td width="300"><%= au_fname %></a></td>
<td width="300"><%= phone %></a></td>
<td width="300"><%= address %></a></td>
</tr>
<%
}%>
<tr bgcolor="#CCCCCC">
<td colspan="5" align="right" valign="middle">共 <%= allCol %>條記錄 共 <%= allpage %>頁 <% if (cpage>1) { %><a href="fy.jsp?pages=<%= cpage-1 %>"><img src="images/prev.gif" border="0"></a><% } if (cpage<allpage) { %><a href="fy.jsp?pages=<%= cpage+1 %>"><img src="images/next.gif" border="0"></a><% } %> / <% for (i=1;i<=allpage;i++) { if (i != pages) {%><a href="fy.jsp?pages=<%= i %>"><%= i %></a>&nbsp;<% }} %></td>
</tr>


回复人:vitamines(Nazi)  四级(中级)  信誉:100      2005-4-1 19:23:08  得分:0

经典的分页,没问题
TOP
回复人:jfy3d(剑事)  一星(中级)  信誉:98      2005-4-1 22:06:13  得分:0

还是 用存储过程好
TOP
回复人:ramboxu(城)  一级(初级)  信誉:100      2005-4-1 23:28:59  得分:0

用struts封装更好
TOP
回复人:hanyun229(云)  一级(初级)  信誉:100      2005-4-2 13:35:58  得分:0

没有问题,不错,不过建议用存储过程
TOP
回复人:webshop(牧羊人)  一级(初级)  信誉:100      2005-4-2 14:43:19  得分:0

真的是不错! 不过大哥在注释的时候能不能用简体字啊,看的小弟@_@.....
^_*
TOP
回复人:tmxkdldw(tmxkdldw)  一级(初级)  信誉:100      2005-4-2 15:23:54  得分:0

没有问题,不错,不过建议用存储过程
TOP
回复人:DanielYWoo(绿色毒汁)  一星(中级)  信誉:104      2005-4-2 17:21:05  得分:20

用你的方法 in 操作是很耗费数据库资源的,如果用你的方法和用absolute+next相比,我以前做过测试,在SQL Server里,如果关键字是在clustered index上,小数据量in操作要慢20%左右,大数据量大概有40%的性能差距。如果关键字是在non-clustered index上,大数据量in操作大概有慢25%,小数据量操作in反而有20%左有的性能提升。这是因为在clustered index上,absolute可以用binary search得到记录的文件物理地址,但是non-clustered index上,absolute要对B-树向下做查找。当然,我的测试不是很严格,可能不同的环境下,性能结果可能会有些出入。

但是absolute操作需要jdbc2.0操作,在某些数据库没有相应的驱动,这种方法不通用。

不管是楼主提供的方法还是用absolute,这两种操作会对表加大量的S锁,对数据库内存消耗很大,不信你用dbcc看看。在SQL Server下的分页解决方案和Oracle的row id没法相比,SQL Server其实就是个垃圾数据库。
TOP


该问题已经结贴 ,得分记录:DanielYWoo(20)、