java 调用SqlServer分页存储过程的,返回多个结果集

来源:互联网 发布:大数据技术是指 编辑:程序博客网 时间:2024/05/01 22:08

存储过程:

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();      }  }  
0 0
原创粉丝点击