千家信息网

SQL Server 2000下JDBC查询分页的解决方案是怎样的

发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,本篇文章给大家分享的是有关SQL Server 2000下JDBC查询分页的解决方案是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧
千家信息网最后更新 2024年10月17日SQL Server 2000下JDBC查询分页的解决方案是怎样的

本篇文章给大家分享的是有关SQL Server 2000下JDBC查询分页的解决方案是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

先在项目的classpath中添加msbase.jar,mssqlserver.jar,msutil.jar 怎么来的就不多废话了。需要说的是我***用的SQL Server 2005 JDBC查询驱动sqlJDBC.jar放到项目中,后来的程序是报错的。回头想想,报错有理,SQL Server 2005 已经支持rownum 分页了。

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

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Pr_QueryByPage]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)  BEGIN  EXEC dbo.sp_executesql @statement = N'create    procedure  [dbo].[Pr_QueryByPage]    @sqlstr  nvarchar(4000),  --查询sql    @currentpage  int, --第页记录条数    @pagesize  int --每页显示记录   as    set  nocount  on    declare  @P1  int, --P1是游标的ID    @rowcount  int    exec  sp_cursoropen  @P1  output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount  output    select  ceiling(1.0*@rowcount/@pagesize)  as TotalPage,@rowcount as [RowCount]   set  @currentpage=(@currentpage-1)*@pagesize+1    exec  sp_cursorfetch  @P1,16,@currentpage,@pagesize      exec  sp_cursorclose  @P1    set  nocount  off  '   END  GO

这个存储过程的实现,使用了三个系统存储过程sp_cursoropen ,sp_cursorfetch ,sp_cursorclose 从字面上的意思大概是他叫结果集使用游标打开,然后读取其中的@pageSize条记录,所以单从查询上来讲,性能是不及使用select top 之类的实现。

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

CallableStatement cs = conn.prepareCall("exec Pr_QueryByPage 'select * from ckdmzd',1,10");              ResultSet rs = null;              /**              * execute returns :              *    true : returns ResultSet(s)              *  false: returns rows affected              */              boolean hasResultSet = cs.execute();              if(hasResultSet){                  /**                  * skip the first ResultSet                  */                  rs=cs.getResultSet();                  /**                  * second ResultSet : pageCount & recordCount                  */                  if(cs.getMoreResults()){                      rs=cs.getResultSet();                      while(rs.next()){                          String pageCount=rs.getString(1);                          String recordCount=rs.getString(2);                      }                  }                  /**                  * the thrid one is the paged result                  */                  if(cs.getMoreResults()){                      rs=cs.getResultSet();                      while(rs.next()){                          // do somthing with ResultSet                      }                  }              }

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

JDBC查询总结

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

以上就是SQL Server 2000下JDBC查询分页的解决方案是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

查询 方法 性能 过程 存储 方案 解决方案 更多 游标 知识 篇文章 结果 还是 项目 麻烦 支持 实用 大同小异 一行 三个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手机里可以有两个服务器的游戏吗 上海服务器电源厂家直销 方舟服务器前面英文啥意思 自学软件开发入门 网络安全排名2021最新排名 软件开发创业企业团队介绍 深圳期货交易软件开发 芜湖蓝孵互联网科技有限公司 服务器的构架 电子商务数据库设计书 DHCP服务器的主要配置文件 软件交互工程师和软件开发 PS软件开发费用 服务器唯一编码怎么查 底层软件开发转上层应用 贵州软件开发外包业务 高级网络安全管理师 嵌入式软件开发与视觉 重庆华为服务器虚拟化定制云主机 存储划lun 服务器 网络安全服务器认证证书 网络技术对口专业 软件开发过程和项目管理总结 国内大学生网络安全比赛 廊坊网络安全培训学校 网络安全排名2021最新排名 200人开一台服务器多少钱 国家网络安全福建分中心 数据库总体架构图 国产数据库产品的成果和结论
0