名扬数据:Java调用SQL Server分页存储过程

 合肥网站建设公司企航这次说说Java调用SQL Server分页存储的过程,其返回是多个结果集,只要呈现形式是代码,文字不多,很好懂滴,要是看不懂,那就直接拿代码去实验吧!
SQL存储过程:
USE [Db_8za8za_2]     
GO     
    
SET ANSI_NULLS ON     
GO     
SET QUOTED_IDENTIFIER ON     
GO     
-- =============================================     
-- Description:    <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   
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();    
    }    
}   

关键词:java,存储过程,分页,调用,代码