问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Ibatis调用Oracle存储过程

发布网友 发布时间:2023-06-25 23:50

我来回答

1个回答

热心网友 时间:2024-03-31 06:35

  最近开始接触Oracle了 接触的越多越感受到自己的渺小!(oracle g Ibatis)

  昨天需要通过数据库查询一组数据 数据中包含一个表中的一条数据 个String类型的字符串 想通过Oralce的存储过程实现

  ibatis映射配置

  <parameterMap id= parameterDJRYID class= java util HashMap >

  <parameter property= v_ryid jdbcType= INTEGER javaType= java lang Integer mode= IN />  //存储过程传入参数

  <parameter property= PYR_IDS jdbcType= VARCHAR javaType= java lang String mode= OUT />  //存储过程传出参数

  <parameter property= PYR_XMS jdbcType= VARCHAR javaType= java lang String mode= OUT />  //存储过程传出参数

  <parameter property= MY_CUR jdbcType= ORACLECURSOR   javaType= java sql ResultSet mode= OUT />    //存储过程传出参数

  </parameterMap>

  <procere id= P_DJ_GETRYANDPYRBYRYID   parameterMap= parameterDJRYID   resultClass= java util HashMap >

  {call P_DJ_GETRYANDPYRBYRYID(?)}    //我的存储过程

  </procere>

  Service类调用Ibatis的代码

  Map paramMap = new HashMap();

  paramMap put( v_ryid primaryKey);

  List <DjRy> list = DBUtil getObjectList( T_Dj_Ry P_DJ_GETRYANDPYRBYRYID paramMap);   //这个是我们自己封装的工具 主要操作Ibatis 这里可以看成Ibatis查询并返回List结果

  Map<String Object> map = new HashMap<String Object>();

  map put( PYR_IDS paramMap get( PYR_IDS ));    //传回的两个参数

  map put( PYR_XMS paramMap get( PYR_XMS ));

  map put( MY_CUR list);

  至于我的存储过程就不写出来了 没什么需要特殊写明的 只是数据库的一些关联查询 比较麻烦 就不贴出来了

  运行起来后 没成功

  提示的错误信息要求检查输出类型

   Check the output parameters (register output parameters failed)

   Cause: java sql SQLException: 无效的列类型

  在Google上百度了一下 大部分的人问题的原因都是在Ibatis映射配置时 传入传出的参数中jdbcType与JavaType的类型不正确 可是我多番验证 我的类型是正确的 同时我将传出的参数一个个的减少 直到没有传出参数才能正常运行 真的郁闷了

  经过几个小时的纠结 终于发现问题的所在了

  在Ibatis映射配置中 当我调用存储过程中 需要使用?进行参数的占位符 而这个参数不能只写入参 还要写出参

  也就是说 我的Ibatis映射配置中调用存储过程的代码应该这样写

  {call P_DJ_GETRYANDPYRBYRYID(? ? ? ?)}

  欲哭无泪啊!!!!

  这样程序终于运行起来了 生活还要继续 问题还要继续产生啊!

  现在是能够在数据库端将数据返回了 返回的结果是 个String类型的字符串 一个结果集 现在我要实现的效果是将结果集给一个list<DjRy>(DjRy是我的Javabean类) 那 个字符串就不用理会了

  可是我怎么给 DjRy这个类都不接受!出错了

  纠结一番 明白了

  原来我在Ibatis映射配置中 定义的存储过程的返回值为HashMap(下面红色的字体)

  <procere id= P_DJ_GETRYANDPYRBYRYID   parameterMap= parameterDJRYID   resultClass= java util HashMap >

  {call P_DJ_GETRYANDPYRBYRYID(? ? ? ?)}    //我的存储过程

  </procere>

  而这个返回值只是指我 个返回值中结果集的返回值 所以说我返回的结果集是以Hashmap的类型存在的 当我将list中的每一个元素给javabean时 就会发生类型转换错误

  此处需要将定义存储过程的代码改为

  <procere id= P_DJ_GETRYANDPYRBYRYID   parameterMap= parameterDJRYID   resultMap= DjRyResult >

  {call P_DJ_GETRYANDPYRBYRYID(? ? ? ?)}

  </procere>

  DjRyResult就是我的Ibatis中针对DjRy定义的resultMap 这样我就可以将返回的结果集传递给DjRy的List中进行遍历了

  还有我的paramMap中在数据库操作之前需要将参数存入 在操作数据库之后 paramMap中会存放返回值中非结果集的参数(包括入参 出参) 而在ibatis中定义的出参MY_CUR其实在paramMap中是null值 而list中存放的却是我的结果集返回值 所以在获取返回的参数时 才会按照下面的方式进行

  map put( PYR_IDS paramMap get( PYR_IDS ));    //传回的两个参数

  map put( PYR_XMS paramMap get( PYR_XMS ));

  map put( MY_CUR list);

  这样也产生了新的问题 当我们在开发过程中 如果要返回 个结果集(或者说存储过程中 要返回 个游标) 又要怎么处理呢?这个还真没想到!谁要是知道 互相交流一下啊!

lishixin/Article/program/Oracle/201311/18047
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何挑选紧致眼霜?有哪些品牌推荐? 怎样挑选抗皱眼霜?有哪些值得安利? 什么品牌的眼霜平价好用? 什么牌子眼霜最好用眼霜十大排名 市面上的大牌抗老眼霜该怎么选? ps4十大最耐玩经营类游戏 推荐点好玩的模拟经营类游戏吧 模拟经营类游戏(模拟经营类游戏简称) 谁有模拟经营版的单机游戏 一个小岛的模拟经营的单机游戏 三系油箱容量 服务器主机与PC个人主机有何具体区别? 吃苯磺酸左旋氨氯地平片对性功能影响大吗,有影响的话 吃氨氯地平后对性功能有影响怎么办? 老公吃苯磺酸氨氯地平片对性生活有影响吗 为什么一亩田上面都要在微信上面聊 络活喜会影响性功能吗 一亩田加微信的都是骗子吗? 在一亩田平台被骗了的钱可以找回来吗 在一亩田上被骗怎么维护自己的合法权益 死亡笔记的作者写过那些动漫或者电影? 阿拉伯大魔神战记的漫画简介 哈弗h3大修之后声音大 是什么原因 济南康语科技是干什么的? 哈弗h3发动机异响怎么办? 哈弗h3 领先版发动机拆车件 康语的蓬勃发展是在谁的带领下 哈弗h3加不起油,大修了发动机还是加不起油是怎么回事? 哈弗h3发动机高温了该怎么处理? 哈弗h3柴油版2.5t气门漏气 5033车牌好吗 环境标准监测GB5033是什么 宿迁乐府兰庭属于哪个社区的 avid公司的 mbox mini3 这款声卡 os x 系统里最高驱动版本是多少? w... 新乐书香苑小区属于哪个社区 《雷欧奥特曼》中出现的安奴是不是真的? protools教育版如何认证 宿迁乐府兰庭书香苑楼盘地址在哪里? 利辛书香苑属于哪个社区 macbook pro 没有光驱安装不了音频驱动(M-AUDIO Fast Track c400)_百度... 黑龙江哈尔滨市南岗区邮编是多少 利辛城关镇书香苑属于哪个社区 sram avid的中文版官网有没有? 阳台种菜的方法和注意事项 南岗邮编 男人是梨,女人是地,后边怎么说 主持人朱军的老婆是谁? 步步高h2的视频支持什么格式 哈弗h6后备箱打不开,哈弗h6后备箱应急开关 步步高h2支持的视频格式 步步高H2视频学习机播放什么格式多大的文件不卡? 球 绿ノ娘(初音) 白ノ娘(弱音) 复讐の娘 (meiko) 青の王子(kaito)_百 ...