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 --------------------编程问答--------------------
这个对,用insert/delete/update都行,还有去掉resultMap,返回结果在parameterMap里。
补充:Java , Web 开发