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()// 检查是否存在更多结果集
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)