java 存储过程 多个结果集_java 调用SqlServer分页存储过程的,返回多个结果集

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

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 墙头草 阅读(1519) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值