对于一个存诸过程,如果返回的结果是我们预先知道的,那么可以根据存储过程定义的顺序来进行
处理(事实上一般不会这样),但对于复杂的多结果集的处理,如何定义一个通用的流程?
我们先看一下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);//获取输出参数
分享到:
相关推荐
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 属性...
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 属性...
这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?) 存储过程如下: 代码如下: use pubs GO — 建立存储过程 create procedure sp_PubsTest — 定义三个参数变量,注意第三...
C++ ADO 访问 SQLServer数据库或其他数据库 实现增、删、改、查、存储过程执行。 技术交流,可以加群 690018451
6、 生成类库的同时系统自动生成相应的存储过程脚本(Proc文件夹)。 一、配置 打开SQLHelper.cs文件,将相应的数据库连接配置信息添加到配置文件中即可。 二、存储过程 打开Proc文件夹,将Proc.sql在相应SQL命令...
一个存储过程包括名字,参数列表,以及可以包括很多sql语句的sql语句集。在这里对局部变量,异常处理,循环控制和if条件语句有新的语法定义。 下面是一个包括存储过程的实例声明: 代码如下: CREATE PROCEDURE ...
在本文中,我们将介绍如何使用DAPPER从单个数据库调用中读取数据库中的多个结果集。我们将看看我们可能希望这样做的场景,以及如何使用它的Query和QueryMultiple方法更简洁地实现这一点。 当我们谈论以数据为中心的...
这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放...
在分区存储的表中处理SQL查询需要使⽤基于分区的执⾏策略,如获取表T中某⼀数值范围内的元组,系统⾸先为整个表T⽣成总的执⾏计 划P,然后将P拆分成n个⼦计划{P1,…,Pn},⼦计划Pi在节点ni上独⽴执⾏,最后每个节点...
特点:可用作数据库/ sql驱动程序句柄,调用存储过程,处理多个结果集,支持数据库镜像连接池,将结果集扫描到结构中。开始安装dependencines必须在系统上安装FreeTDS库。 Mac brew安装freetds Ubuntu,Debian ... ...
能及时处理由过程控制反馈的数据并作出响应的操作系统是( ) A、分时系统 B、网络系统 C、实时系统 D、批处理系统 5.UNIX系统是一个__________操作系统。 A、单用户 B、单用户多任务 C、多用户多任务 D、多用户单...
基本处理过程 包括: · 从HDFS⽂件系统读取数据集 · 将数据集拆分成⼩块并分配给所有可⽤节点 · 针对每个节点上的数据⼦集进⾏计算(计算的中间态结果会重新写⼊HDFS) · 重新分配中间态结果并按照键进⾏分组 ·...
VB常用技巧合集 chm全集,比如ActiveX .Exe ....DAO 中得到存储过程返回值,VB程序中处理随机事件,VB应用程序访问SQL Server方法探讨,VB应用程序中用DDE功能开发AutoCAD,按字母或数字顺序排列列表框中的列表项……
设计适当的触发器 设计一个适合的数据库备份策略 6、实施阶段 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。 三、设计内容 1将概念模型转化为关系模型 从E- R图中可以看到有6个实体,所以我建立了6...
构建知识图谱的过程通常包括数据抽取、知识融合、实体识别、关系抽取等多个步骤,涉及到自然语言处理、机器学习、数据库技术等多种技术手段。知识图谱的不断完善有助于实现从海量信息中挖掘深层次、有价值的知识,...
派生数据体系 在数据系统架构中,我们可以看到会存在多套存储组件.对于这些存储组件中的数据 ,有些是来自应用的直写,有些是来自其他存储组件的数据复制。例如业务关系数据库 的数据通常是来自业
基于Spring Boot的多媒体素材库的开发与应用是一个面向开发者和内容创作者的项目,旨在简化多媒体资源的存储、管理和分发过程。该项目通过提供一个集中化的平台,帮助用户高效地组织和访问大量的图片、音频、视频等...
同步技术是保证复制移动数据库系统一致性的一项关键技术,鉴于目前移动复制同步技术存在通讯数据量大,存储空间消耗多,尤其是在网络带宽下降时,不能及时更新客户端的数据,导致移动事务执行失败等缺陷。...
多媒体:使用计算机交互式综合技术和数字通信网络技术处理多种表示媒体——文本、图 形、图像和声音,使多种信息建立逻辑连接,集成为一个交互式系统。 5. 多媒体技术:计算机综合处理文本、图形、图像、音频与视频...
有很多特殊情况,这种存储库使任何人都可以检查中间文件以了解结果是否正确,并找出解析错误的根本原因。 一般信息 官方网站: 原始纸:,, 创建过程: : 资源管理器来源: : 关注项目并获得帮助 邮件列表: ...