当前位置:编程学习 > JAVA >>

ibatis+spring+struct2.0 存储过程返回值的问题

ibatis配置
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
 
    
<parameterMap id="pm_getPersonName" class="java.util.Map">	   
   <parameter property="person_name_in" javaType="java.lang.Long" jdbcType="NUMBER" mode="IN"/> 
   <parameter property="name_out" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT"  />
    </parameterMap>
    <resultMap class="java.util.Map" id="return_getPersonName">
     <result property="name_out" column="person_name"/>
    </resultMap>
    
    <procedure id="getPersonName" parameterMap="pm_getPersonName" resultMap="return_getPersonName">     
       {call GetPersonNameByCode(?,?)}
    </procedure> 
  </sqlMap>
存储过程:
create or replace procedure GetPersonNameByCode(person_id_in in NUMBER,name_out out varchar2)
 as
begin
  select t.person_name into name_out from PA_USER t where t.person_id = person_id_in;
end;

dao调用:
String name="";
Map map = new HashMap();
map.put("person_name_in", person_id);
map.put("name_out", name);

this.getSqlMapClientTemplate().queryForObject("getPersonName", map);
name = (String)map.get("name_out");//获取返回值  
System.out.print("name-------------------"+name);
return name;


当程序执行到this.getSqlMapClientTemplate().queryForObject("getPersonName", map);这里就不走了,也不报错了,好奇怪的
--------------------编程问答-------------------- 我是第一次使用存储过程,我现在可以实现没有返回值的,有返回值的就是获得不到的。查了很多信息,试了好多但是都没成功 --------------------编程问答-------------------- 都没人路过吗?好失落哦! --------------------编程问答-------------------- 在存储过程里面声明个游标类型的参数:RESULT_SET     OUT SYS_REFCURSOR 的输出参数,在java里面传入Vector,

--------------------编程问答-------------------- 必须需要游标吗?我看了很多介绍好像可以不用游标的 --------------------编程问答-------------------- 不用游标你在存储过程里面怎么返回结果集?用字符串拼吗? --------------------编程问答-------------------- 返回一个map不可以吗?新手可能问题比较傻 --------------------编程问答-------------------- http://www.cnblogs.com/jinqiuqiu1120/archive/2011/05/13/2045261.html
create or replace procedure handiwork(cesuDate in varchar2,csCount out number) is
begin
  select count(*) into csCount from csjl where to_char(qssj,'yyyy-mm-dd')= cesuDate;
end handiwork;
好像都是这样写的 --------------------编程问答-------------------- 不好意思,原来你只返回了一个名称,不用也可以。

你把这个去掉resultMap="return_getPersonName",感觉没有什么作用,你pm_getPersonName这个里面就有输出参数,结果就是赋给这个map里面的out参数了。 --------------------编程问答-------------------- 那个参数的确没有用的,我加和不加都没什么影响的 --------------------编程问答-------------------- 2011-06-29 14:10:21,625 [java.sql.Connection] - DEBUG  : {conn-100000} Connection
 2011-06-29 14:10:21,671 [java.sql.Connection] - DEBUG  : {conn-100000} Preparing Call: {call GetPersonNameByCode(?,?)}
 2011-06-29 14:10:23,109 [java.sql.PreparedStatement] - DEBUG  : {pstm-100001} Executing Statement: {call GetPersonNameByCode(?,?)}
 2011-06-29 14:10:23,109 [java.sql.PreparedStatement] - DEBUG  : {pstm-100001} Parameters: [10000760]
 2011-06-29 14:10:23,109 [java.sql.PreparedStatement] - DEBUG  : {pstm-100001} Types: [java.lang.Long]
我的程序运行到这就不在往下面走了,就停在这了,好奇怪的。好几天的都没弄清楚是怎么回事的 --------------------编程问答-------------------- 存储过程改成这样子看下
create or replace procedure GetPersonNameByCode(person_id_in in NUMBER,name_out out varchar2)
 as
begin
 declare @name nvarchar(200)
  select @name=t.person_name into name_out from PA_USER t where t.person_id = person_id_in;
 return @name
end;

--------------------编程问答-------------------- 有懂推荐引擎的吗,有算法工程师的职位。qq:396319982 --------------------编程问答-------------------- 不能用queryForObject   要用insert    --------------------编程问答--------------------
引用 13 楼 gif_t_t 的回复:
不能用queryForObject 要用insert

这个对,用insert/delete/update都行,还有去掉resultMap,返回结果在parameterMap里。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,