我简略的贴出来下:
mapper代码:
public interface TActWintxnGroupMapper {
List<TActWintxnGroup> execProcedure(Map<String, Object> param);
}
service代码:
void findListByParamExport(Map<String, Object>params) throws Exception;
serviceImpl代码:
public void findListByParamExport(Map<String, Object> params)throws Exception{
reportActWintxnGroupMapper.execProcedure(params);
}
action代码:
Map<String, Object> params = new HashMap<String, Object>();
List<TActWintxnGroup> lists = new ArrayList<TActWintxnGroup>();
params.put("v_cursor", lists);//输出参数传入
reportWintxnGroupService.findListByParamExport(params);
List<TActWintxnGroup> depts = (ArrayList<TActWintxnGroup>)params.get("v_cursor");
最后一行代码报错:java.lang.ClassCastException: oracle.jdbc.driver.OracleResultSetImpl cannot be cast to java.util.ArrayList
我看网上的例子都是说,以游标形式返回,我这个为啥不行????
xml调用代码:
<!--注明statementType="CALLABLE"表示调用存储过程-->
<!--传入传出参数要注明mode=IN/OUT 并要注明jdbcType ,返回参数要注明对应的resultMap-->
<select id ="execProcedure" parameterType="java.util.Map" statementType="CALLABLE" resultMap="BaseResultMap">
{call rebate_anlyse(
#{v_cursor, mode=OUT, jdbcType=CURSOR})}
</select >
打印params.get("v_cursor")控制台输出:oracle.jdbc.driver.OracleResultSetImpl@c02c47
应该说明是有值返回的。
50分够不够哇?没怎么提问过0_0
------解决方案--------------------
java调用存储有输出参数:
proc.registerOutParameter(1, java.sql.Types.VARCHAR);
注册参数类型
------解决方案--------------------
改这个试试jdbcType="ORACLECURSOR"
------解决方案--------------------
已发件!请查收。看适不适用你那种情况。
------解决方案--------------------
说明你返回的是一个对象
<select id ="execProcedure" parameterType="java.util.Map" statementType="CALLABLE" resultMap="BaseResultMap">
其中BaseResultMap可以改成anlyseMap
然后<resultMap id="anlyseMap" class="java.util.HashMap">
<result property="**" column="**" />
<result property="**" column="**" />
<result property="**" column="**" />
</resultMap>