当前位置: 代码迷 >> Java Web开发 >> mybatis+springmvc调用存储过程返回结果集调用报错有关问题
  详细解决方案

mybatis+springmvc调用存储过程返回结果集调用报错有关问题

热度:241   发布时间:2016-04-16 21:59:22.0
mybatis+springmvc调用存储过程返回结果集调用报错问题
我简略的贴出来下:
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>
  相关解决方案