Java CallableStatement 调用 MSSQL存储过程中sp_executesql执行的结果集

BenjaminMa 发布于 2012/05/17 17:03
阅读 1K+
收藏 0

Java的JDBC中,CallableStatement cstmt = con.prepareCall(procedure);

这段代码调用普通的存储过程没有问题。

但是因为项目中特殊原因会涉及到动态表名,所以在存储过程的游标中有如下的SQL语句:

	--定义动态表名游标
	declare TableCursor Cursor Scroll for 
		select FTableName from dbo.CD_DayTableName where FDate between @BeginDate and @EndDate and FType='0'
		
	--打开游标
	open TableCursor
	--取值到变量
	fetch next from TableCursor into @TableName
	--遍历数据
	while(@@FETCH_STATUS = 0)
		BEGIN
				
		declare @sql  nvarchar(1000)
			
		set @sql=N' select * from '+@TableName+' ' '--删了一些具体参数			
		
		EXECUTE sp_executesql @sql ,--执行的SQL语句
		N' @cardno varchar(20), @director int, @biztype varchar(10) ',
		@cardno=@FUserCardNo ,@director='-1',@biztype='1006';

				
		fetch next from TableCursor into @TableName
		END
	close TableCursor
	deallocate TableCursor 

现在使用以下的Java代码来取得结果集:

			con = dbpool.getConSlaveDB();
			String procedure = "{call Pro_CD_Cardlist(?,?,?,?,?)}";
			CallableStatement cstmt = con.prepareCall(procedure);
			cstmt.setString(1, date1);
			cstmt.setString(2, date2);
			cstmt.setString(3, operatorCardNo);
			cstmt.setString(4, stationID);
			cstmt.setString(5, cardType);
			if ( cstmt.execute()){
				rs = cstmt.getResultSet();
				System.out.println("1debug");
				while (rs.next()){
			System.out.println("rs --->“+rs.getString(1));
				}
			}

			return rs;

上面的代码返回的rs都是空的,使用getRow()得到也是0.

请问下是不是JDBC在调用EXECUTE sp_executesql 不会返回结果集。

加载中
0
BenjaminMa
BenjaminMa
没人有过相关经验吗?
返回顶部
顶部