如果存储过程 循环结果集返回多个结果集,怎么取结果

数据库存储过程能返回多个结果集吗?_百度知道如何返回存储过程中所有结果集_百度知道T-SQL&存储过程中返回结果&&返回多结果集
Java调用SQL
Server存储过程同时返回参数和结果集
比如SQL Server的一个存储过程:
create&procedure&proc_test&
@q_type&int,
@value&int,
@count&int&output
&&&&&update&mytable&set&value&=&@value&where&type&=&@q_type
&&&&&set&@count&=&@@rowcount
&&&&&select&*&from&mytable&where&type&=&@q_type
这个存储过程,既有输出参数,又有返回结果集,而用java调用他,两者都要取到,则代码如下:
Connection&conn&=&MyConnectionPool.getConnection();
CallableStatement&cstmt&=&conn.prepareCall("{call&proc_test(?,?,?)}");
cstmt.setInt(1,&type);
cstmt.setInt(2,&value);
cstmt.registerOutParameter(3,&java.sql.Types.INTEGER);
ResultSet&rs&=&cstmt.executeQuery();
while(rs.next())&{
&&&doSomeThingToResultSet(rs);
doSomeThingToOutParameter(cstmt.getInt(3));
rs.close();
cstmt.close();
conn.close();
其中的关键在于哪儿呢?
必须用cstmt.executeQuery()来取得结果集,用cstmt.execute()然后getResultSet()是取不到的,而executeQuery()能保证先执行update再select;
获得输出参数的cstmt.getInt(3)必须在处理完结果集的所有内容后再执行,如果把上述代码改成如下:
doSomeThingToOutParameter(cstmt.getInt(3));
while(rs.next()) {
doSomeThingToResultSet(rs);
后果就是,在rs.next()的时候,会抛出异常:java.sql.SQLException:
[Microsoft][SQLServer 2000 Driver for JDBC]Object has been
很有趣,不是么?
=========================================================================
因为sqlserver2k的官方驱动问题,一直以来用jdbc没有很好的办法取多结果集,公司系统里采用的是2种方式来搞,一种是增删查改用jdbc方式,对报表统计那块就采用odbc的方式,因为最近要改为连接池访问数据库,所以才有时间专门针对取多结果集的问题进行研究。
原来在odbc中取结果集的方式是
Connection DBConn =
&&Statement stmt =
&&ResultSet RS =
&&DataBase db = new
DataBase();
&&String temp = "";
&&StringBuffer sb = new
StringBuffer();
&&&DBConn =
db.connect(Database);
&&&&&&&&&&&&&&&&&
DBConn.createStatement();
&&&stmt.execute(SQL);
stmt.getResultSet();
&&&while (RS ==
null && stmt.getMoreResults())
= stmt.getResultSet();
&&&sb.append("&?xml
version="1.0" encoding="" + this.encoding +
&&&sb.append("&root&");
&&&while (true)
(RS != null) {
&&&&&while
(RS.next()) {
&&&&&&InputStream
is = RS.getBinaryStream(1);
&&&&&&InputStreamReader
isr = new InputStreamReader(is,"UnicodeLittle");
&&&&&&while
((c = isr.read()) != -1) {
&&&&&&&sb.append((char)
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}
(stmt.getMoreResults()) {
&&&&&RS.close();
= stmt.getResultSet();
&&&sb.append("&/root&");
&&catch(Exception e)
e.getMessage();
&&&db.close(RS,
stmt, DBConn);
&&return sb.toString();
&上面是由存储过程生成xml文件用odbc读取并转化为字符串,现在使用了jdbc方式,取结果集的代码如下:
&Connection DBConn =
&&CallableStatement stmt =
&&ResultSet RS =
&&DataBase db = new
DataBase();
&&String temp = "";
&&StringBuffer sb = new
StringBuffer();
&&DBConn =
db.connectjdbc(Database);
&&&stmt=DBConn.prepareCall(SQL,
ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
&&&stmt.executeQuery();
updateCount=-1;
&&&sb.append("&?xml
version="1.0" encoding="" + this.encoding+
&&&sb.append("&root&");
&&&&&&&&&&&&&
updateCount = stmt.getUpdateCount();
&&&&&&&&&&&&&
if(updateCount != -1){//说明当前行是一个更新计数
//&&&&&&&&&&&&&
&&&&&&&&&&&&&
&stmt.getMoreResults();
&&&&&&&&&&&&&
&//已经是更新计数了,处理完成后应该移动到下一行
//&&&&&&&&&&&&&
不再判断是否是ResultSet
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&while (true)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&RS = stmt.getResultSet();
&&&&&&&&if
(RS != null) {
&&&&&&&&&&ResultSetMetaData
rsmd = RS.getMetaData();& //获取字段名
&&&&&&&&&&int
numberOfColumns = rsmd.getColumnCount(); //获取字段数
&&&&&&&&&&int
&&&&&&&&&&while(RS.next()){
//将查询结果取出&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&
i&=numberOfCi++){&&
&&&&&&&&&&&&&
&String date=RS.getString(i);
&&&&&&&&&&&&&
&sb.append(date);
&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&RS.close();
&&&&&&&&if
(stmt.getMoreResults())
&&&&&&&&&RS
= stmt.getResultSet();
&&&&&&&&else
&&&&&&&&&&&&&
&&&&&&&&&&
}while(!(updateCount == -1 && RS ==
&&catch(Exception e)
e.getMessage();
&&&db.close(RS,
stmt, DBConn);
&&sb.append("&/root&");
&&return sb.toString();
==================================================================================
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。mybatis 使用Mysql 的存储过程 怎么返回多个结果集啊_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:508,526贴子:
mybatis 使用Mysql 的存储过程 怎么返回多个结果集啊收藏
我有九个结果集 后台只查到第一个结果集的数据
上海java培训,选达内,美国上市教育机构,「java培训之父」Sun认证,先就业后付款!达内java培训,名师授课,0基础120天速成java工程师,0元试学!学习+认证+就业=薪前景!
我的映射XML
你的意思是返回一个集合吗
你的map里面写List&Object&就好了啊
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 存储过程返回结果集 的文章

 

随机推荐