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将被忽略
页:
[1]