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) 编辑 收藏