首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>mysql>正文

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

http://www.oklinux.cn  2006-07-25  来源: oklinux收集整理  johnhoo      会员收藏  游客收藏  【 】 
对于一个存诸过程,如果返回的结果是我们预先知道的,那么可以根据存储过程定义的顺序来进行
处理(事实上一般不会这样),但对于复杂的多结果集的处理,如何定义一个通用的流程?

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

上一篇:SQL 语法参考手册   下一篇:hibernate查询语句--HQL


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·SQL 语法参考手册
·hibernate查询语句--HQL
·SQL教程简明教程
·完整路径在树型结构表中的应用
·SQL定义语言(ACCESS2000中的语法)
·jsp中的数据库编程
·高手论道 活动目录概念和灾难恢复
·SQL语法详解
·如何让你的SQL运行得更快更有效率
·在SQL中使用convert函数进行日期的查询
·优化SQLServer数据库服务器内存配置
·SQL语法速成
·SQL高手篇:精妙SQL语句介绍
·SQL Server7移动数据的6种方法
·优化SQL Server索引
·理解NULL如何影响IN和EXITS语句
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·SAVEPOINT和ROLLBACK TO SAVEPOINT语法
·深入讲解"InnoDB"和"MyISAM"的不同之处
·MySQL的存储过程写法和"Cursor"的使用
·如何安装配置基于2台服务器的MySQL集群
·带你轻松接触一个检测MySQL状态的脚本
·实例讲解"MySQL"在记录不存在时的插入
·无需编程直接利用图形界面导入导出的方
·教你快速掌握 MySQL数据库中触发器的应
·解析:怎样在MySQL中获得更好的搜索结果
·将数据从MySQL迁移到 Oracle的注意事项
·细化解析:怎样修改 MySQL数据库中的密
·解析:优化MySQL数据库性能的几个好方法
  阅读排行
·Linux 安装 Mysql
·如何在Linux系统中安装MySQL
·在Linux 环境下安装 Mysql
·在Linux上安装MySQL Server 5.0
·图形化管理MySQL更轻松
·[Mysql]IIS+mysql+php相关知识介绍
·MySQL创始人David Axmark 访谈实录
·你应该知道的10个MySQL客户启动选项
·Heartbeat_2.0.3配置MySQL5.0.8集群
·Linux系统上安装MYSQL数据库的方法
·[MySQL]入门学习从安装入门到学习操作
·MySQL中文参考手册-创造并使用数据库
·MySQL5.0新特性教程 存储过程:第三讲
·MySQL 5.0新特性教程 存储过程:第一讲
·[Mysql]Mysql数据库管理系统优化方案
网摘收藏: