hibrenate 调用mysql存储过程,返回存储过程中自定义的输出字符串

liwu556677 2013-05-16 10:50:27
我的存储过程如下:

delimiter $$

use `familyaccountmanagement`$$

drop procedure if exists `deleteRole`$$

create definer=`root`@`localhost` procedure `deleteRole`(uid varchar(1000))
_return:begin
declare rids varchar(8); -- 角色ID
declare roleids varchar(8); -- 角色编号
declare rolnams varchar(32);-- 角色名称
declare fanames varchar(60);-- 家庭名称
declare ruids varchar(8); -- 该角色在s_roleusers这个表中有多少条记录
declare total int default 0; -- 这个删除角色的有多少个
declare i int default 0;

set @total = func_split_TotalLength(uid, ',');
while i < @total do
set i = i + 1;
set @roleids = '0';
set @rids = func_split(uid, ',', i);
select roleid, rolnam, faname into @roleids, @rolnams, @fanames from `s_role` where rid = @rids;
select count(*) into @ruids from `s_roleusers` where ru_rid = @roleids;
select @ruids;
if @ruids = 0 then
delete from `s_role` where rid = @rids;
else
set @rolnams = concat(@fanames, '下面的(', @rolnams, ')角色还有用户,请先删掉用户!');
select 'false' success, @rolnams errorMsg;
leave _return;
end if;
end while;
select 'true' success, '角色删除成功' errorMsg;

end$$

delimiter ;


现在我就是要在Java中用 hibrenate去调用这个存储过程来执行删除角色的功能,当这个角色下有用户时,希望能终止存储过程的执行,并且返回set @rolnams = concat(@fanames, '下面的(', @rolnams, ')角色还有用户,请先删掉用户!');
select 'false' success, @rolnams errorMsg;这个错误信息。



我的Java代码调用的地方如下:


public Object executeHql(String hql, Object[] params) {
Session s = this.getCurrentSession();
s.beginTransaction();
//hql == {call deleteRole(?)}
SQLQuery q = s.createSQLQuery(hql);
for (int i = 0; i < params.length; i++) {
if (params[i] instanceof String) {
q.setString(i, (String) params[i]);
} else if(params[i] instanceof Integer) {
q.setInteger(i, (Integer) params[i]);
} else if(params[i] instanceof Long){
q.setLong(i, (Long) params[i]);
} else if(params[i] instanceof Double){
q.setDouble(i, (Double) params[i]);
} else if(params[i] instanceof Date){
q.setDate(i, (Date) params[i]);
}
}
ScrollableResults sr = q.scroll();
while (sr.next()) {
Object str1 = sr.get(0);
System.out.println(str1.toString());
//这里输出来的结果为整数
}
s.getTransaction().commit();
return sr;
}

执行这个代码后,sr返回的是一个数组,而且里面就是数字, 这不是我想要的结果,我需要输出我存储过程中定义的具体错误信息
set @rolnams = concat(@fanames, '下面的(', @rolnams, ')角色还有用户,请先删掉用户!');
select 'false' success, @rolnams errorMsg;这个错误信息。


请高手们指点,看我那里些得不对,我的hibrenate版本是4.1.6,mysql版本为5.5
...全文
175 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jumpheightway 2013-05-17
  • 打赏
  • 举报
回复
结果在哪里呢
liwu556677 2013-05-17
  • 打赏
  • 举报
回复
有高手知道吗?给个提示啊

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧