六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 79|回复: 0

Java调用存储过程(补充)

[复制链接]

升级  23.33%

19

主题

19

主题

19

主题

秀才

Rank: 2

积分
85
 楼主| 发表于 2013-1-13 18:53:34 | 显示全部楼层 |阅读模式
如果存储过程返回多个结果集(ResultSets),那如何获取返回的所有结果的数据呢?
使用CallableStatement接口来实现这个功能.

先建立一个返回多个Result sets的存储过程(使用DB2数据库实验)
CREATE PROCEDURE RETURN_TWO_CURSORS() LANGUAGE SQL SPECIFIC RETURN_ALL_RESULT_abc DYNAMIC RESULT SETS 2 re:BEGIN --定义两个游标,以便返回两个结果集DECLARE c_book CURSOR WITH RETURN FOR SELECT * FROM BOOK; DECLARE c_t1 CURSOR WITH RETURN FOR SELECT * FROM T1; OPEN c_book; OPEN c_t1; END re

JAVA代码(部分)如下:
//先连接数据库(省略)...//调用存储过程,获取数据String sql = "{?=CALL LONGSY.RETURN_TWO_CURSORS()}";CallableStatement cs = conn.prepareCall(sql);cs.registerOutParameter(1,Types.OTHER);cs.execute();do{    ResultSet rs = cs.getResultSet();    while(rs.next()) {    System.out.println(rs.getInt(1) + ":" + rs.getString(2));    }}while(!(cs.getMoreResults()==false&&(cs.getUpdateCount()==-1)));
不能写成如下代码:
while(!(cs.getMoreResults()==false&&(cs.getUpdateCount()==-1))){         ResultSet rs = cs.getResultSet();    while(rs.next()) {        System.out.println(rs.getInt(1) + ":" + rs.getString(2));    }}
   原因:getMoreResults方法将数据库游标向下移动了,如果再调用getResultSet方法将取到的是第二个ResultSet,而第一个ResultSet将被忽略
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表