mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

mybatis调用mysql存储过程(返回参数,单结果集,多结果集),第1张

mybatis调用mysql存储过程(返回参数,单结果集,多结果集)

注: RETCODE、RETDESC 这里的输出值不用在函数里 SELECT RETCODE,因为即使没有,当执行成功后会自动返回在对象里(Object/Map),所以在函数里不用SELECT一下了。

Navicat中执行函数需要输入参数值,也是对应图1,@A@B表示输出值。(一个输入值两个输出值)

1. 标注一二三四五处如果存在,则执行成功后返回结果如下

标注一对应结果1

标注二对应结果2

标注三对应结果3

标注四对应结果4

标注五对应结果5

其中结果3返回的是集合。

存在这么多结果,想要取结果3中的集合是不好取的,只有像下图一样只有一个结果才好取出集合。

2. 标注一二四五处如果不存在,则执行成功后返回结果如下

只有结果1,对应的是标注三处的值。可以取出集合

函数p_duplicate_enroll

存储过程经常需要返回多个结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结 果 集。这一点 Mysql 相对比较方便,如下代码即可实现输出两个结果集:

CREATE PROCEDURE test_proc_multi_select()

BEGIN

select * from testproc

select * from testproc where id=1

END

java 中利用循环,即可获取结果集数据:

con = MConnection.getConn()

String sql = "{call test_proc_multi_select()}"

cs = con.prepareCall(sql)

boolean hadResults = cs.execute()

int i = 0

while (hadResults) {

System.out.println("result No:----" + (++i))

ResultSet rs = cs.getResultSet()

while (rs != null &&rs.next()) {

int id1 = rs.getInt(1)

String name1 = rs.getString(2)

System.out.println(id1 + ":" + name1)

}

hadResults = cs.getMoreResults()// 检查是否存在更多结果集

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7091056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存