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
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();
}
}
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();
}
}