posts - 241,  comments - 116,  trackbacks - 0
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();  
    }  
posted on 2011-06-17 11:26 墙头草 阅读(1600) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
人人游戏网 软件开发网 货运专家