900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Sql server 2000 jdbc 查询分页解决方案

Sql server 2000 jdbc 查询分页解决方案

时间:2024-05-22 21:10:59

相关推荐

Sql server 2000 jdbc 查询分页解决方案

今天小编给大家介绍下Sql server 2000 jdbc 查询分页解决方案,平时喜欢Sql server 2000 jdbc 查询分页解决方案的朋友赶紧收藏起来吧!记得点赞哦~

之所以要把sql server 2000 jdbc 分页单独来说说,又两个地方还是值得一提,一者是sql server 2000要实现数据库分页是比较麻烦的事情。二者是jdbc查询出多个ResultSet 的取法。

先在项目的classpath中添加,, 怎么来的就不多废话了。需要说的是我最先用的sql server jdbc驱动放到项目中,后来的程序是报错的。回头想想,报错有理, server 已经支持rownum 分页了。

先说说sql server 2000的分页的实现,目前实现方法大概是那三种。我个人还是喜欢使用存储过程,原因是使用非常方便,至于使用的存储过程,这里还是放出来看看,估计大家用的都大同小异。

IFNOTEXISTS(SELECT*(&#&#)(,&#&#))

BEGIN

[email protected]=N'createprocedure[dbo].[Pr_QueryByPage]

@sqlstrnvarchar(4000),--查询sql

@currentpageint,--第页记录条数

@pagesizeint--每页显示记录

as

setnocounton

[email protected],--P1是游标的ID

@rowcountint

[email protected],@sqlstr,@scrollopt=1,@ccopt=1,@[email protected]

selectceiling([email protected][email protected])asTotalPage,@rowcountas[RowCount]

[email protected]=(@currentpage-1)[email protected]+1

[email protected],16,@currentpage,@pagesize

[email protected]

setnocountoff'

END

GO

这个存储过程的实现,使用了三个系统存储过程sp_cursoropen ,sp_cursorfetch ,sp_cursorclose 从字面上的意思大概是他叫结果集使用游标打开,[email protected],所以单从查询上来讲,性能是不及使用select top 之类的实现。

使用起来非常容易,exec Pr_QueryByPage 'select * from yourtable',1,10 就可以了麻烦的是他返回的是三张表。第一张表是查询的表,但是没有记录。第二个表一行两列,第一个列是总页数,第二个列是总记录条数。第三张表才是需要的数据。这就造成了取的时候有点小麻烦,因为之前只知道,在.net中可以直接fill(DataSet),然后DataSet里面可取DataTable。但是在jdbc里面我映像中ResultSet 只能容一张表。后来找了一些资料,原来PreparedStatement,CallableStatement,Statement都支持查询返回多个ResultSet ,好了,非常好。 下面是我使用CallableStatemnt取到的结果集。

CallableStatementcs=conn.prepareCall("execPr_QueryByPage'select*fromckdmzd',1,10");

ResultSetrs=null;

/**

*executereturns:

*true:returnsResultSet(s)

*false:returnsrowsaffected

*/

booleanhasResultSet=cs.execute();

if(hasResultSet){

/**

*skipthefirstResultSet

*/

rs=cs.getResultSet();

/**

*secondResultSet:pageCount&recordCount

*/

if(cs.getMoreResults()){

rs=cs.getResultSet();

while(rs.next()){

StringpageCount=rs.getString(1);

StringrecordCount=rs.getString(2);

}

}

/**

*thethridoneisthepagedresult

*/

if(cs.getMoreResults()){

rs=cs.getResultSet();

while(rs.next()){

//dosomthingwithResultSet

}

}

}

这样就实现了分页,网上很多人测试了,这个方法的性能不及别的方法,这里我要指出的是,别的方法是不能返回总的记录条数的。而要知道总的记录条数,通常需要select count(*) from ( your sql) 这两次查询叫起来的时间未必会少。

总结

使用上述方法实现sql server 2000 jdbc 分页,使用方便,性能还说的过去。我不知道sql server 的查询性能是否又提升。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。