怎么取到sqlserver的系统存储过程sp_cursorfetch返回的结果集?
--存储过程
CREATE procedure Page_proc
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
GO
--直接执行存储过程的结果
exec page_proc 'select * from sysobjects',1,10
。。。
10 92 1
sysobjects 1 S 1 25 -536870909 96
sysindexes 2 S 1 29 -536870907 32
syscolumns 3 S 1 32 -536870909 80
systypes 4 S 1 20 -536870909 80
syscomments 6 S 1 10 -536870911 48
sysfiles1 8 S 1 4 -536870912 0
syspermissions 9 S 1 11 -536870911 16
sysusers 10 S 1 20 -536870909 96
sysproperties 11 S 1 5 -536870911 32
sysdepends 12 S 1 11 -536870909 64 。。。
--test.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>测试</title>
<link rel="stylesheet" href="css.css" type="text/css">
<body class="bg_body" >
<%
int EveryPage=10;//每页显示的记录数;
int OnPage=1; //当前显示的页数;
int Total=0;//记录的总数;
int TotalPage=0;//记录的总页数;
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=SupplyQuery";
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
String procsql="{call Page_proc(?,?,?)}";
java.sql.CallableStatement stmt=conn.prepareCall(procsql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from sysobjects";
stmt.setString(1,sql);
stmt.setInt(2,OnPage);
stmt.setInt(3,EveryPage);
out.println("执行存储过程"+stmt.execute()+"<p>");
ResultSet rs=null;
/*
while(stmt.getMoreResults())
{
rs=stmt.getResultSet();
while(rs.next())
{
out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
}
}
*/
rs=stmt.getResultSet();
out.println("第一个结果集输出:"+"<p>");
while(rs.next())
{
out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
}
out.println("结束。"+"<p>");
if(stmt.getMoreResults())
{
rs=stmt.getResultSet();
out.println("第二个结果集输出:"+"<p>");
while(rs.next())
{
out.println("共"+rs.getString(1)+"页 "+"共"+rs.getString(2)+"条记录 第"+rs.getString(3)+"页"+"<p>");
}
out.println("结束。"+"<p>");
}
else
out.println("wrong");
if(stmt.getMoreResults())
{
rs=stmt.getResultSet();
out.println("第三个结果集输出:"+"<p>");
while(rs.next())
{
out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
out.println("right");
}
out.println("结束。"+"<p>");
}
else
out.println("wrong");
rs.close();
stmt.close();
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
%>
</body>
</html>
页面输出结果:
执行存储过程true
第一个结果集输出:
结束。
第二个结果集输出:
共10页 共92条记录 第1页
结束。
第三个结果集输出:
结束。