本文主要谈谈Java调用SQL Server分页存储的过程,其返回是多个结果集,只要呈现形式是代码,文字不多,简单易懂。

站在用户的角度思考问题,与客户深入沟通,找到耒阳网站设计与耒阳网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网站空间、企业邮箱。业务覆盖耒阳地区。
SQL存储过程:
- USE [Db_8za8za_2]
 - GO
 - SET ANSI_NULLS ON
 - GO
 - SET QUOTED_IDENTIFIER ON
 - GO
 - -- =============================================
 - -- Description:
 - -- =============================================
 - ALTER PROCEDURE [dbo].[paging ]
 - -- Add the parameters for the stored procedure here
 - --传入参数
 - @SqlStr nvarchar(4000), --查询字符串
 - @CurrentPage int, --第N页(当前页数)
 - @PageSize int --每页行数
 - AS
 - BEGIN
 - -- SET NOCOUNT ON added to prevent extra result sets from
 - -- interfering with SELECT statements.
 - SET NOCOUNT ON;
 - --定义变量
 - DECLARE @CursorId int --CursorId是游标的id
 - DECLARE @Rowcount int --总记录(行)数
 - DECLARE @pageCount int --总页数
 - -- Insert statements for procedure here
 - EXEC sp_cursoropen @CursorId output,@SqlStr,
 - @Scrollopt=1,@Ccopt=1,@Rowcount=@Rowcount OUTPUT
 - SET @pageCount=CEILING(1.0*@Rowcount/@PageSize)--设置总页数
 - SELECT @pageCount
 - AS 总页数,@Rowcount AS 总行数,@CurrentPage AS 当前页 --提示页数
 - IF(@CurrentPage>@pageCount)--如果传入的当前页码大入总页码数则把当前页数设为***一页
 - BEGIN
 - SET @CurrentPage = @pageCount--设置当前页码数
 - END
 - IF(@CurrentPage<=0)--如果传入的当前页码大入总页码数则把当前页数设为***页
 - BEGIN
 - SET @CurrentPage = 1--设置当前页码数
 - END
 - SET @CurrentPage=(@CurrentPage-1)*@PageSize+1 --设置当前页码数
 - EXEC sp_cursorfetch @CursorId,16,@CurrentPage,@PageSize
 - EXEC sp_cursorclose @CursorId --关闭游标
 - SET NOCOUNT OFF
 - END
 
#p#
Java调用储存过程:
- package test;
 - import java.sql.*;
 - public class Study3 {
 - private Connection con;
 - public ResultSet rs;
 - private CallableStatement callsta;
 - private String use = "sa";
 - private String pwd = "sa";
 - public Study3() {
 - try {
 - // 连接数据库驱动
 - Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
 - String str = "jdbc:microsoft:sqlserver://localhost:1433;databasename=test";
 - con = DriverManager.getConnection(str, use, pwd);
 - // 设置存储过程参数
 - String st = "{call Paging(?,?,?)}";
 - callsta = con.prepareCall(st);
 - callsta.setString(1, "select * from T_employee");
 - callsta.setInt(2, 1);
 - callsta.setInt(3, 3);
 - // 循环输出调用存储过程的记录结果
 - StringBuffer sb=new StringBuffer();
 - int rsNum=0;//统计结果集的数量
 - int updateCount = -1;
 - boolean flag = callsta.execute();// 这个而尔值只说明***个返回内容是更新计数还是结果集。
 - do {
 - updateCount = callsta.getUpdateCount();
 - if (updateCount != -1) {// 说明当前行是一个更新计数
 - // 处理.
 - System.out.println("..说明当前行是一个更新计数..");
 - callsta.getMoreResults();
 - continue;// 已经是更新计数了,处理完成后应该移动到下一行
 - // 不再判断是否是ResultSet
 - }
 - rs = callsta.getResultSet();
 - if (rs != null) {// 如果到了这里,说明updateCount == -1
 - // 处理rs
 - rsNum++;
 - System.out.println("统计结果集的数量:"+rsNum);
 - if (rs != null) {
 - ResultSetMetaData rsmd = rs.getMetaData(); // 获取字段名
 - int numberOfColumns = rsmd.getColumnCount(); // 获取字段数
 - int i = 0;
 - while (rs.next()) { // 将查询结果取出
 - for (i = 1; i <= numberOfColumns; i++) {
 - // System.out.println(rs.getInt("总页数"));
 - String date = rs.getString(i);
 - sb.append(date+" ");
 - }
 - }
 - rs.close();
 - }
 - callsta.getMoreResults();
 - continue;
 - // 是结果集,处理完成后应该移动到下一行
 - }
 - // 如果到了这里,说明updateCount == -1 && rs == null,什么也没的了
 - System.out.println(sb.toString());
 - } while (!(updateCount == -1 && rs == null));
 - // callsta.getXXX(int);//获取输出参数
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 - public static void main(String[] age) {
 - Study3 study = new Study3();
 - }
 - }