Java调用存储过程(补充)

如果存储过程返回多个结果集(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将被忽略

你可能感兴趣的:(java,sql,c,jdbc,db2)