`

关于多结果集的存储过程的处理

阅读更多
对于一个存诸过程,如果返回的结果是我们预先知道的,那么可以根据存储过程定义的顺序来进行
处理(事实上一般不会这样),但对于复杂的多结果集的处理,如何定义一个通用的流程?

我们先看一下JDBC本身能为我们提供什么?
一个存储过程执行后返回的是boolean型:
boolean flag = callableStatement.execute();
如果flag为true,那么说明返回了一个结果集(ResultSet)类型,你可以用getResultSet()得到当前行所在
的结果,而如果返回为flase,说明什么呢?

如果你不进行处理,什么也不能说明,只能说明当前指针不是ResultSet,有可能是更新计数(updateCount)
也可能什么也没有反因.

那么如果当前指针为flase时如何处理?我们应该先getUpdateCount();如果返回-1,既不是结果集,又
不是更新计数了.说明没的返回了.而如果getUpdateCount()返回0或大于0,则说明当前指针是更新计数(
0的时候有可能是DDL指令).无论是返回结果集或是更新计数,那么则可能还继续有其它返回.只有在当前
指指针getResultSet()==null && getUpdateCount() == -1才说明没有再多的返回.

存储过程的返回和ResultSet类似,每次处理的返回结果相当于是ResultSet的Row,只不过存储过程的Row
最先在第一行而不是象ResultSet要先next才到第一行,存储过程向下移动一行用getMoreResults(),相
当于ResultSet的next().同样它返回boolean和上面的flag一样,只是说明当前行是不是ResultSet,如果是
flase,你还是要判断是不是updateCount,在每一行,都要先同时判断是否为ResultSet还是UpdateCount,如
果是其中一种则要继续getMoreResults(),当不是ResultSet也不是updateCount时,说明没有返回结果了,
这时再获取输出参数.

看明白了吗?

那我们就根据上面的规则来写一个通用的流程吧:

首先,我们要确定什么时候没说结果集了:
if(cs.getResultSet() == null && cs.getUpdateCount() == -1)
现在我们做一个循环:
ResultSet rs = null;
int updateCount = -1;
flag = cs.execute();
do{
    updateCount = cs.getUpdateCount();
    if(updateCount != -1){//说明当前行是一个更新计数
        //处理.
        cs.getMoreResults();
        continue;//已经是更新计数了,处理完成后应该移动到下一行
             //不再判断是否是ResultSet
    }
    rs = cs.getResultSet();
    if(rs != null){//如果到了这里,说明updateCount == -1
        //处理rs
        cs.getMoreResults();
        continue;
            //是结果集,处理完成后应该移动到下一行
    }
    //如果到了这里,说明updateCount == -1 && rs == null,什么也没的了
   
}while(!(updateCount == -1 && rs == null));
cs.getXXX(int);//获取输出参数 
分享到:
评论

相关推荐

    MySQL存储过程.pdf

    同时,存储过程也可以返回多个值,包括标量、数组和记录集等。 特色条款 存储过程可以包含多种特色条款,例如条件语句、循环语句和错误处理语句等。这些特色条款可以实现复杂的业务逻辑,提高存储过程的灵活性和可...

    java调用sqlserver存储过程.pdf

    下面是关于 Java 调用 SQL Server 存储过程的知识点: 1. 创建存储过程 在 SQL Server 中,存储过程是一个预编译的 SQL 语句集,可以对数据库中的数据进行操作。在本例中,创建了一个名为 `InsertUser` 的存储过程...

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与触发器 10.6.3 序列号表 10.6.4 在一个临时表中保存标识值 10.7 GUI 10.8 使用MIN或MAX函数的While循环 10.9 属性...

    数据库原理与应用:第9章 存储过程的创建和使用.ppt

    2. 执行存储过程:存储过程可以通过接收参数向调用者返回结果集,结果集的格式由调用者确定。 3. 查看和修改存储过程:存储过程可以在SQL Server中被查看和修改。 4. 重命名和删除存储过程:存储过程可以在SQL ...

    SQLServer2000高级编程技术(part02)-想学存储过程 SQL编程 务必要看

    10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与触发器 10.6.3 序列号表 10.6.4 在一个临时表中保存标识值 10.7 GUI 10.8 使用MIN或MAX函数的While循环 10.9 属性...

    在Sql Server数据库中利用存储过程实现动态交叉表.pdf

    "在Sql Server数据库中利用存储过程实现动态交叉表.pdf" 本文主要讲述了在Sql Server数据库中利用存储过程实现动态交叉表的技术。交叉表是一种特殊的表格形式,它可以将数据按照某种规则进行转换和重新组织,以便更...

    asp sqlserver 执行存储过程返回记录集报对象关闭时不允许操作

    这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?) 存储过程如下: 代码如下: use pubs GO — 建立存储过程 create procedure sp_PubsTest — 定义三个参数变量,注意第三...

    C++ ADO 访问 SQLServer数据库或其他数据库 实现增、删、改、查、存储过程执行

    C++ ADO 访问 SQLServer数据库或其他数据库 实现增、删、改、查、存储过程执行。 技术交流,可以加群 690018451

    多功能.NET代码自动生成器(含存储过程)

    6、 生成类库的同时系统自动生成相应的存储过程脚本(Proc文件夹)。 一、配置 打开SQLHelper.cs文件,将相应的数据库连接配置信息添加到配置文件中即可。 二、存储过程 打开Proc文件夹,将Proc.sql在相应SQL命令...

    星环科技多模型数据库ArgoDB“一库多用“,构建高性能湖仓集一体平台

    通过 ArgoDB 打造的湖仓集一体方案,用户可以基于统一访问接口,将多种数据库语言变为一种语言,最大程度上降低数据湖、数据仓库、数据集市业务过程中业务接口的调整,降低用户开发成本和使用门槛,提高数据处理效率...

    MySql的存储过程学习小结 附pdf文档下载

    一个存储过程包括名字,参数列表,以及可以包括很多sql语句的sql语句集。在这里对局部变量,异常处理,循环控制和if条件语句有新的语法定义。 下面是一个包括存储过程的实例声明: 代码如下: CREATE PROCEDURE ...

    如何使用Dapper处理多个结果集与多重映射实例教程

    在本文中,我们将介绍如何使用DAPPER从单个数据库调用中读取数据库中的多个结果集。我们将看看我们可能希望这样做的场景,以及如何使用它的Query和QueryMultiple方法更简洁地实现这一点。 当我们谈论以数据为中心的...

    关于使用存储过程创建分页

    这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放...

    第6章 虚拟存储管理.ppt

    虚拟存储管理的引入是基于局部性原理的,即程序执行时,大多数情况下是顺序执行的,过程调用会使程序的执行轨迹从一部分内存区域转至另一部分区域,但过程调用的深度不会超过5。程序中有许多循环语句,这些语句会...

    多媒体技术及应用第二版课后习题及答案分享.pdf

    音频信号可以通过采样、量化、编码等过程将模拟音频信号转换为数字音频信号。音频压缩算法有多种,包括MP3、WAV等。 多媒体数据库系统是多媒体技术的重要组成部分。多媒体数据库系统可以存储、管理和检索多媒体数据...

    大学计算机基础多媒体技术基础ppt课件.ppt

    多媒体数据的特点包括数据量巨大、数据类型较多、数据存储容量差别大、数据处理方法不同和数据输入和输出复杂。 多媒体文件的存储格式 多媒体文件的存储格式实际上是一种信息的数字化存储方式。文件头多媒体数据。...

    大数据的存储和管理.pdf

    在分区存储的表中处理SQL查询需要使⽤基于分区的执⾏策略,如获取表T中某⼀数值范围内的元组,系统⾸先为整个表T⽣成总的执⾏计 划P,然后将P拆分成n个⼦计划{P1,…,Pn},⼦计划Pi在节点ni上独⽴执⾏,最后每个节点...

    用-Hadoop-进行分布式数据处理

    HDFS 将数据分块存储在多个节点上,每个节点都可以并行处理数据。MapReduce 是一个编程模型,用于并行处理大规模数据。MapReduce 将数据处理过程分为两个阶段:Map 阶段和 Reduce 阶段。Map 阶段将输入数据分割成...

    转到Sql Server数据库驱动程序。-Golang开发

    特点:可用作数据库/ sql驱动程序句柄,调用存储过程,处理多个结果集,支持数据库镜像连接池,将结果集扫描到结构中。开始安装dependencines必须在系统上安装FreeTDS库。 Mac brew安装freetds Ubuntu,Debian ... ...

    操作系统习题集.doc

    能及时处理由过程控制反馈的数据并作出响应的操作系统是( ) A、分时系统 B、网络系统 C、实时系统 D、批处理系统 5.UNIX系统是一个__________操作系统。 A、单用户 B、单用户多任务 C、多用户多任务 D、多用户单...

Global site tag (gtag.js) - Google Analytics