`
chenyunhong
  • 浏览: 141023 次
  • 性别: Icon_minigender_1
  • 来自: 真的不知道
社区版块
存档分类
最新评论

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

阅读更多

存储过程:

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();  
    }  
}  
 
2
1
分享到:
评论

相关推荐

    hiberate SQL Server 2000 存储过程.pdf

    在上述映射文件中,定义了一个名为`selectAllUsers`的存储过程调用,该过程返回多个字段。在Java代码中,可以通过`session.getNamedQuery("selectAllUsers")`获取Query对象,并进一步执行存储过程。 #### 3. 特殊...

    sqlserver写的分页存储过程

    通过这样的方式,你可以轻松地在Java或.NET应用程序中调用SQL Server的分页存储过程,实现高效且灵活的分页查询。这不仅可以提高性能,还可以减少网络传输的数据量,提升用户体验。在实际项目中,可能还需要考虑其他...

    JAVA+SQL SERVER通信录

    总的来说,"JAVA+SQL SERVER通信录"项目涵盖了Java编程、JDBC技术、SQL语言、数据库设计、GUI编程等多个方面的知识。开发者需要具备扎实的编程基础,理解数据库原理,并了解如何将这些技术融合在一起,以实现一个...

    毕业设计-源码Java调用Oracle存储过程实现分页功能

    5. **处理结果集**:如果存储过程返回结果集,可以通过`ResultSet`对象进行遍历和操作。对于分页,可能需要对结果进行进一步处理,例如计算总页数等。 6. **关闭资源**:执行完数据库操作后,记得关闭`ResultSet`、...

    java+sqlserver 图书管理系统

    本文将详细介绍一个使用Java编程语言开发,配合SQLServer数据库的图书管理系统,探讨其核心技术和实现原理。 一、Java技术基础 Java是一种广泛应用于服务器端开发的高级编程语言,以其“一次编写,到处运行”的特性...

    JAVA 运用存储过程的分页

    在实际应用中,你可能会遇到更复杂的情况,比如需要处理多表联查,或者存储过程返回多个结果集。这时,你可以调整存储过程的逻辑,并在Java代码中进行相应处理。 在分页查询时,通常还会涉及到排序,可以通过在存储...

    sqlserver.jar

    `sqlserver.jar` 是一个与 Microsoft SQL Server 数据库交互的 Java 驱动程序包,主要用于 JDBC(Java Database Connectivity)应用程序。JDBC 是 Java 平台中的一个标准接口,允许 Java 程序连接到各种数据库,包括...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    开发者可以通过CallableStatement对象来执行存储过程,并获取其返回的结果。 在安全性方面,JDBC Driver 3.0支持SSL加密,保证了数据传输的安全性。同时,它还支持Windows集成认证,简化了身份验证流程。 在实际...

    jsp 分页存储过程

    - **返回结果**:Servlet将存储过程返回的结果集转换为Java对象,如List,然后通过HTTP响应发送回JSP。 - **JSP渲染**:JSP接收到响应后,使用EL(Expression Language)或JSTL(JavaServer Pages Standard Tag ...

    针对SQL 2000 的分页存储过程代码分享

    【SQL 2000 分页存储过程详解】 在数据库管理中,分页查询是一种常见的需求,它允许用户以一定数量的记录(如每页10条)来浏览大量数据,提高用户界面的响应速度和用户体验。在SQL Server 2000中,由于不支持直接的...

    jsp分页和存储过程

    - **调用存储过程**:在Java代码中调用存储过程,传入相应的参数,获取结果集。 - **处理结果集**:将结果集转换为Java对象列表,供前端展示使用。 ##### 3. 示例代码(MySQL) ```sql DELIMITER // CREATE ...

    java oracle数据库过程实现jsp分页

    在Oracle数据库中,我们可以创建一个包含分页逻辑的存储过程,接收两个参数:页数`P`和每页大小`N`,并返回所需的数据。 以下是一个简单的Oracle存储过程示例: ```sql CREATE OR REPLACE PACKAGE page_pkg AS ...

    Java共通的分页代码提取

    在Java编程中,分页是数据管理中的一个关键特性,特别是在处理大数据集合时。它允许用户按需加载和浏览数据,提高...通过这样的通用分页代码,开发人员可以在多个项目中快速复用,减少重复工作,提高代码质量和维护性。

    Microsoft SQL Server 2005 JDBC Driver

    3. **存储过程**:调用CallableStatement的executeCall()方法执行SQL Server的存储过程。 4. **连接池**:结合第三方连接池组件(如C3P0、Apache DBCP等),可以管理和复用数据库连接,提升系统性能。 5. **元数据...

    jdbcTemplate分页彻底解决,使用游标滚动

    例如,可以创建一个存储过程,该过程返回一个可滚动的结果集。然后,`JdbcTemplate`会使用`ResultSetExtractor`接口来处理这个结果集。`SplitPageResultSetExtractor`可能就是这样一个自定义的提取器,用于分割结果...

    sqlserver2005JDBC驱动

    此外,SQL Server 2005 JDBC驱动支持多种高级特性,如批处理操作、预编译的SQL语句(提高性能)、存储过程调用、游标操作以及连接池管理。对于大数据量的处理,可以使用分页查询和批处理技术优化性能。 总的来说,...

    sqljdbc4.jar依赖包

    3. 存储过程:提供对SQL Server存储过程的支持,可以调用存储过程并处理返回结果。 4. 游标:提供游标支持,允许开发者在处理大量数据时向前或向后移动,实现分页查询等操作。 5. 预编译语句:通过...

    struts+sqlserver2000 留言板

    总结,"struts+sqlserver2000留言板"项目涵盖了Java Web开发的基本要素:Struts框架的使用、数据库设计与操作、JSP视图的构建以及安全策略的实施。这个项目是学习和理解Web应用开发流程的好起点,同时也有助于提升...

    网上书店系统(JSP+javascript+JavaBean+SQLServer)

    这个系统的核心技术栈包括JSP(JavaServer Pages)、JavaScript、JavaBean以及SQLServer数据库。下面将详细解释这些技术在系统中的作用及其相互间的协同工作。 **JSP(JavaServer Pages)**: JSP是Java的一种动态...

Global site tag (gtag.js) - Google Analytics