ibatis调用存储过程分页问题

lyhmy 2011-08-29 11:51:43
xml文件:

<typeAlias alias="vpmnBeanModel" type="com.znwbb.vpmn.bean.Vpmn"/>

<resultMap id="vpmnInfo" class="vpmnBeanModel">
<result property = "callbegintime" column = "callbegintime"/>
<result property = "calltype" column = "calltype"/>
<result property = "callduration" column = "callduration"/>
<result property = "callingpartynumber" column = "callingpartynumber"/>
<result property = "calledpartynumber" column = "calledpartynumber"/>
</resultMap>

<parameterMap id="vpmnSelect" class="java.util.HashMap">
<parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="vpmnInfo" mode="OUT"/>
<parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
<parameter property="in_str_begintime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_str_endtime" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_call" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_called" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
<parameter property="in_currentpage" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="in_pagesize" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="in_qrytype" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>

<procedure id="vpmnprom" parameterMap="vpmnSelect">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>




Java:

public List<Vpmn> vpmnBySelect(Vpmn vpmn, int currentPage, int pageSize, int querytype)
{
Map map = new HashMap();

map.put("cur_sql", OracleTypes.CURSOR);

map.put("v_rowcount", java.sql.Types.INTEGER);

map.put("in_str_begintime", vpmn.getStarttime() );

map.put("in_str_endtime", vpmn.getEndtime());

map.put("in_call", vpmn.getCallingpartynumber() );

map.put("in_called", vpmn.getCalledpartynumber());

map.put("in_currentpage", currentPage );

map.put("in_pagesize", pageSize);

map.put("in_qrytype", querytype);

getSqlMapClientTemplate().queryForList("vpmnprom", map);

@SuppressWarnings("unused")
List list = (List) map.get("cur_sql");
int result = (Integer) map.get("v_rowcount");


if (list == null || list.size() == 0 || result == 0)
{
list = new ArrayList();
}
return list;
}


以上是代码,存储过程应该没什么问题,因为我在sql plus中执行是没问题,但是在调用的时候,他总是说我的输出参数有问题,执行到红色部分时就出错,报错信息如下:
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; --- The error occurred in com/znwbb/vpmn/dao/xml/vpmn.xml. --- The error occurred while executing query procedure. --- Check the {call ireport_vpmn(?,?,?,?,?,?,?,?,?)}. --- Check the output parameters (register output parameters failed).

请问各位有什么办法解决????
...全文
216 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhmy 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 villagehead 的回复:]
没明白为什么该成“parameterMap="Integer"”就可以了
传进去的不也是个map吗??

求解帮顶

good luck
[/Quote]
这个貌似不行,我记得当时我有按照他说的那种改过,但还是有错,最后没能解决掉,所以就没用这个了。不过一直到现在都还没人给出个解决方法,所以我也就还没结贴,还是寄希望于谁能帮忙解决下的
villagehead 2011-10-19
  • 打赏
  • 举报
回复
没明白为什么该成“parameterMap="Integer"”就可以了
传进去的不也是个map吗??

求解帮顶

good luck
小基 2011-10-19
  • 打赏
  • 举报
回复
顶下
lyhmy 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tanyue110 的回复:]
参数应该是#参数#把
调用 map.put("cur_sql", "参数");
[/Quote]

cur_sql是一个游标,那样写可以的,是能得到游标返回的结果集,
v_rowcount是表示总记录数的,是int型的(我不加这个就不会报错,就可以有正确数据)
二佗 2011-08-29
  • 打赏
  • 举报
回复
参数应该是#参数#把
调用 map.put("cur_sql", "参数");
lyhmy 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 softroad 的回复:]
检查输出参数类型,并设置。
[/Quote]
输出参数就是一个游标(返回的是查询的结果集),和一个int型的参数
<parameter property="cur_sql" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="vpmnInfo" mode="OUT"/>
<parameter property="v_rowcount" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
这两句不是设置吗???要么还是还需要在其他地方设置下????
二佗 2011-08-29
  • 打赏
  • 举报
回复
终于知道错误了
<procedure id="vpmnprom" parameterMap="Integer">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>

开始没认真看

Oracle的是把,那就明白了他的错误是无效的列类型。你检查为什么把。
返回一个Map对吧这个应该是可以的
lyhmy 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tanyue110 的回复:]
<select id="selectCount" resultClass="Integer">
select count(1) from elca_dubious_attach_info_tb where
#logtime2#>logtime and logtime> #logtime#
</select>


这是我写的返回的也是int
[/Quote]

这种直接用sql获取条数的有用过,但是这个问题是在存储过程中,过程中是可以获取到得,我现在是要调用这个过程,就需要输出它吧,但是没成功,出了这样的错
lyhmy 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tanyue110 的回复:]
终于知道错误了
<procedure id="vpmnprom" parameterMap="Integer">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>
[/Quote]

数据库是Oracle,parameterMap="Integer"??返回的结果集是不是对应bean的么,对于这个v_rowcount我只要它的记录数就可以了吧,这样我就可以进行其他的运算,这边直接返回一个Integer不可能吧,难道要专门写一个<parameterMap>,就只为返回它?????

我还是没太明白,麻烦你能否在将明白点
softroad 2011-08-29
  • 打赏
  • 举报
回复
检查输出参数类型,并设置。
二佗 2011-08-29
  • 打赏
  • 举报
回复
<select id="selectCount" resultClass="Integer">
select count(1) from elca_dubious_attach_info_tb where
#logtime2#>logtime and logtime> #logtime#
</select>


这是我写的返回的也是int
二佗 2011-08-29
  • 打赏
  • 举报
回复
终于知道错误了
<procedure id="vpmnprom" parameterMap="Integer">
<![CDATA[{call ireport_vpmn(?,?,?,?,?,?,?,?,?)} ]]>
</procedure>


二佗 2011-08-29
  • 打赏
  • 举报
回复
<parameter property="v_rowcount" jdbcType="number" javaType="java.lang.Integer" mode="OUT"/>


你是什么数据库
课程简介:本项目实战课程,从基础的项目需求,到项目模块编码,均采用实战教学。目标是让学员学习项目开发的基础流程,学习市面上主流框架SpringBoot、SpringMvc、Spring、MyBatis等实战开发核心技术点。熟悉企业级项目管理与构建,提升学员代码编码能力和实战项目编码经验。养成规范化、标准化的代码编写习惯和良好的技术文档习惯。相信通过整个项目的学习和编码,学习Java项目开发中的难点技术,深刻理解Java编程中的技术原理,以帮助学员走向高手之路。 项目技术栈: - 采用SpringBoot简化商城系统的初始搭建以及开发过程- 开发环境采用Maven实施多模块项目构建,采用Git进行项目版本管理;- 采用SpringMVC+Spring+IBatis完成项目的整合- 采用Mysql作为数据库存储,druid配置数据库连接池- 采用FastDFS文件储存系统文件存储,完成广告图片、商品图片的上传和存储- 使用ECharts根据后台查询数据生成图表- 使用POI实现了商城盈利状况的Excel表格导出。- 商品的详情页使用Thymeleaf完成页面静态化,减少页面数据展示延迟- 项目中使用SpringBoot下的Aop + 自定义注解完成用户行为记录,日志采集- 后台管理系统使用Shiro实现登录验证和权限管理(超级管理员、管理员、产品编辑员) 项目部分截图:            

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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