posts - 241,  comments - 116,  trackbacks - 0
          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 
          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 墻頭草 閱讀(1602) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 无为县| 四平市| 桂阳县| 固始县| 鸡西市| 交城县| 金乡县| 全州县| 中西区| 布拖县| 凭祥市| 南部县| 枣阳市| 新巴尔虎右旗| 宁津县| 瓦房店市| 建昌县| 咸阳市| 连云港市| 大宁县| 来凤县| 酉阳| 含山县| 会理县| 襄汾县| 柘荣县| 平塘县| 玛沁县| 定远县| 清流县| 博罗县| 永顺县| 偏关县| 如皋市| 普陀区| 长宁区| 图片| 商南县| 新兴县| 乐清市| 岫岩|