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

t13523417 2014-08-20 02:36:01
我简略的贴出来下:
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
...全文
1253 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
katana2014 2016-05-30
  • 打赏
  • 举报
回复
springMVC + MyBatis 配置 实现类:代码 params.put("v_cursor", new ArrayList<Map<String, Object>>()); systemMapper.selectCustOrderList(params); logger.info("rtnNo="+params.get("rtnNo")); logger.info("rtnMsg="+params.get("rtnMsg")); ArrayList<Map<String, Object>> list = (ArrayList<Map<String,Object>>)params.get("v_cursor"); if(null != list) { for(Map<String, Object> map : list) { logger.info("orderId="+map.get("orderId")); logger.info("totalQty="+map.get("totalQty")); logger.info("goodNm="+map.get("goodNm")); } } xml配置 <resultMap type ="java.util.HashMap" id= "cursorMap"> <result column ="ORD_ID" property="orderId" /> <result column ="TOTAL_QTY" property="totalQty" /> <result column ="GOOD_NM" property="goodNm" /> </resultMap > <select id ="selectCustOrderList" parameterType= "map" statementType="CALLABLE" > <![CDATA[ call shop88.sppub_ord_get ( #{rtnNo, mode=OUT, jdbcType=INTEGER,javaType=Integer}, #{rtnMsg, mode=OUT, jdbcType=VARCHAR,javaType=String}, #{v_cursor, mode=OUT, jdbcType=CURSOR,javaType=java.sql.ResultSet, resultMap=cursorMap}, #{custId,mode=IN,jdbcType=INTEGER,javaType=Integer}, #{sdate,mode=IN,jdbcType=VARCHAR,javaType=String}, #{edate,mode=IN,jdbcType=VARCHAR,javaType=String}, #{ordStat,mode=IN,jdbcType=VARCHAR,javaType=String}, #{start,mode=IN,jdbcType=INTEGER,javaType=Integer}, #{end,mode=IN,jdbcType=INTEGER,javaType=Integer}, #{etrId,mode=IN,jdbcType=VARCHAR,javaType=String} ) ]]> </select > 主要的错误 是因为需要定义好 javaType=java.sql.ResultSet
巧猪 2015-10-22
  • 打赏
  • 举报
回复
我也遇到同样的问题
  • 打赏
  • 举报
回复
说明你返回的是一个对象 <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>
t13523417 2014-08-25
  • 打赏
  • 举报
回复
引用 6 楼 ck199007081001 的回复:
已发件!请查收。看适不适用你那种情况。
引用 6 楼 ck199007081001 的回复:
已发件!请查收。看适不适用你那种情况。
这位牛叉。邮件已收到,例子一大堆,一比较发现问题了,正确如下: #{v_cursor, mode=OUT, jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=com.huateng.mis.mapper.TActWintxnGroupMapper.BaseResultMap}) 感谢这哥们分享的例子及其分享的下载地址。。 你到这个地址去下载,我以前上传过,但是需要3分 http://download.csdn.net/detail/ck199007081001/5043313 (全部) 最后100分送上。。
AlenCheng 2014-08-21
  • 打赏
  • 举报
回复
已发件!请查收。看适不适用你那种情况。
t13523417 2014-08-21
  • 打赏
  • 举报
回复
引用 4 楼 wesesdon 的回复:
改这个试试jdbcType="ORACLECURSOR"
客官~~~不可以~~~~ 改了之后报错: java.lang.IllegalArgumentException: No enum const class org.apache.ibatis.type.JdbcType.ORACLECURSOR mybatis里应该就是CURSOR的。。
t13523417 2014-08-21
  • 打赏
  • 举报
回复
引用 6 楼 ck199007081001 的回复:
已发件!请查收。看适不适用你那种情况。
发件?。。。我没收到啊,发我qq邮箱吧,405099147@qq.com...能不能相关一套的代码,xml,action,dao,service都给我发下。。我比较下。。万分感谢!!
  • 打赏
  • 举报
回复
改这个试试jdbcType="ORACLECURSOR"
t13523417 2014-08-20
  • 打赏
  • 举报
回复
人呢???难道是分少了。。。 我再追加50分,100了!!!!!!!!!!!!!!!!! 来人啊
t13523417 2014-08-20
  • 打赏
  • 举报
回复
引用 1 楼 r562253897 的回复:
java调用存储有输出参数: proc.registerOutParameter(1, java.sql.Types.VARCHAR); 注册参数类型
用mybatis+springmvc框架下的话,怎么写呢?我这里暂时不能用jdbc的方式。。
独家de记忆 2014-08-20
  • 打赏
  • 举报
回复
java调用存储有输出参数: proc.registerOutParameter(1, java.sql.Types.VARCHAR); 注册参数类型

81,122

社区成员

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

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