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

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

阅读更多

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

我们先看一下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);//获取输出参数

分享到:
评论

相关推荐

    Oracle存储过程返回结果集

    当需要从存储过程中返回多个结果时,通常会使用结果集。本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在...

    delphi如何调用sql存储过程,并获取结果

    在Delphi中调用SQL存储过程并获取结果是数据库编程中的一个重要环节。下面将通过给定的代码示例,详细解析Delphi如何调用SQL存储过程,并获取执行结果。 ### Delphi调用SQL存储过程的基本步骤 #### 1. 准备工作 ...

    Oracle 返回多个结果集

    在Oracle数据库中,返回多个结果集是一个常见的需求,特别是在处理复杂的查询或存储过程时。一个结果集通常对应于SQL查询的执行结果,但有时我们可能需要在一个操作中获取并处理多个独立的结果集。这就涉及到了...

    mysql存储过程之返回多个值的方法示例

    MySQL存储过程是数据库中用于执行复杂操作的一组预编译的SQL语句,它们可以接收输入参数、输出结果以及在内部处理数据。在本示例中,我们将探讨如何通过存储过程返回多个值,并且结合PHP进行调用。 首先,我们要...

    java调用oracle存储过程并得到结果集

    Oracle存储过程可以返回多个结果集,因此我们需要使用`CallableStatement`而不是`PreparedStatement`。调用存储过程的语法是`{call procedure_name(参数列表)}`。例如: ```java CallableStatement cs = connection....

    LINQ TO SQL 存储过程-返回结果集

    在 LINQ to SQL 中,使用存储过程可以返回结果集,包括单个结果集和多个结果集。下面我们将详细介绍如何使用 LINQ to SQL 实现存储过程的返回结果集。 一、返回单个结果集 在 LINQ to SQL 中,我们可以使用存储...

    c#多条件查询存储过程实例

    ### C#多条件查询存储过程实例 #### 一、引言 在开发应用程序时,数据库查询操作是非常常见的需求之一。为了提高查询效率和代码的可维护性,使用存储过程来进行多条件查询是一种非常有效的方法。本文将通过一个具体...

    将结果集转换为INSERT的存储过程

    - **结果集存储**:生成的INSERT语句最终会被插入到临时表`#result`中,以便后续使用或导出。 #### 4. 应用场景 - **数据库迁移**:当需要将某个数据库的数据迁移到另一个数据库时,可以通过此存储过程快速生成...

    db2 存储过程语法与实例

    在存储过程中,可以使用游标来处理查询结果集,并通过循环来遍历这些结果。 9. **示例应用** - **用户管理**:创建一个存储过程用于添加新用户,验证用户名的唯一性。 - **数据分析**:创建一个存储过程,计算...

    birt调用存储过程

    - **调用返回多个结果集的存储过程**:如果存储过程返回多个结果集,BIRT会自动处理并分别显示每个结果集。 6. **参考文档和资源** 为了更深入地了解BIRT调用存储过程,可以查阅官方文档和其他在线资源,例如提供...

    ADO调用存储过程||ADO读取结果集

    在本篇讨论中,我们将深入探讨如何使用ADO调用存储过程以及如何将返回的结果集显示到ListView控件中,特别在VC6.0环境下进行测试。 首先,存储过程是预编译的SQL语句集合,它可以包含一系列复杂的业务逻辑,提高了...

    hibernate query调用oracle存储过程

    存储过程是预编译的SQL语句集合,可以接受参数、返回结果并执行一系列操作。函数则类似于存储过程,但必须返回一个值。在Oracle中,它们都存储在数据库中,可被多次调用,提高了代码复用性和执行效率。 在Hibernate...

    DB2 SQL存储过程基础

    存储过程是一种特殊的数据库对象,能够接受输入参数、执行复杂的业务逻辑、返回结果集等。 存储过程的基本概念: * Routine: Routine 是指存储在服务器端、按应用程序逻辑编写的可以被 client 或者其他 routine ...

    J2EE+Spring+Ibatis2+blazeds存储过程调用返回结果集

    在这个项目中,我们结合了Spring框架、Ibatis持久层框架以及Blazeds技术,来演示如何调用存储过程并处理返回的结果集。下面将详细讲解这些技术的运用。 首先,J2EE是一种广泛用于开发分布式企业应用的平台,它提供...

    net常用排序存储过程合集

    例如,可以创建一个存储过程,接收参数并返回按特定字段排序的结果集。这样,不仅减少了数据传输,还能利用数据库的索引优化。 5. **参数化查询与存储过程**:存储过程支持参数化,能有效防止SQL注入攻击。在.NET中...

    oracle存储过程使用游标对多表操作例子

    标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,如何利用存储过程和游标实现跨多个表的数据处理。描述部分重复了标题内容,强调了示例性质,表明文章将通过具体实例来...

    SAP HANA 中调试存储过程

    SAP HANA中的存储过程通常是用SQLScript编写的,这是一个专门用于SAP HANA的SQL扩展集,它允许开发人员执行复杂的数据处理操作。在SAP HANA中调试存储过程时,需要注意存储过程中的代码是顺序执行的,而不是并行执行...

    存储过程写法,存储过程

    存储过程是一种在数据库中存储并编译好的SQL程序,它能够接受输入参数,执行一系列操作,并返回一个或多个结果集。存储过程可以提高应用程序性能、减少网络流量、简化复杂逻辑处理,并增强数据安全性。 ### 二、...

    存储过程精妙语句初学精通

    - 游标允许存储过程逐行处理结果集,提供更灵活的数据操作能力。 - 例如,遍历表中的每一行,根据当前行的值做出决策。 8. **异常处理**: - 使用`TRY...CATCH`结构,可以在存储过程中捕获和处理错误,提高程序...

    sql多条件存储过程

    存储过程可以接受输入参数,并返回结果集或输出参数值。它通常用于实现复杂的业务逻辑,比如数据处理、事务管理等。 #### 二、SQL多条件存储过程示例分析 根据给定的内容,我们将详细解析这个具体的SQL存储过程案例...

Global site tag (gtag.js) - Google Analytics