本文主要谈谈Java调用SQL Server分页存储的过程,其返回是多个结果集,只要呈现形式是代码,文字不多,简单易懂。
SQL存储过程:
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(); } }
原文链接:http://chenyunhong.iteye.com/blog/1096195
本文主要谈谈Java调用SQL Server分页存储的过程,其返回是多个结果集,只要呈现形式是代码,文字不多,简单易懂。 SQL存储过程: 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(); } }
原文链接:http://chenyunhong.iteye.com/blog/1096195