日期:2014-05-19  浏览次数:20709 次

关于ibatis的错误,无效的列类型
sqlmap:

<sqlMap namespace="om_OnlineVO">
  <parameterMap class="java.util.HashMap" id="bevymap">
  <parameter property="uid" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN" />
  <parameter property="u_showblance" jdbcType="VARCHAR2" javaType="java.lang.String" mode="OUT" />
  <parameter property="u_rsstring" jdbcType="VARCHAR2" javaType="java.lang.String" mode="OUT" />
  <parameter property="u_ret" jdbcType="NUMBER" javaType="java.lang.Integer" mode="OUT" />
  </parameterMap>
  <procedure id="select_info_onlineall" parameterMap="bevymap">
{call p_service.sp_coselectbevy(?,?,?,?)}
  </procedure>
</sqlMap>


存储过程:
procedure sp_coselectbevy(member_id number,showblance out varchar2,rsstring out varchar2,ret out integer)
is


代码:
  Map map = new HashMap();
  int int_id = Integer.parseInt(u_id);
  map.put("uid",int_id);

  this.queryForObject(SELECT_ONLINE_USER,map);
  String u_showblance = (String)map.get("u_showblance");
  String u_rsstring = (String)map.get("u_rsstring");
  int u_ret = (Integer)map.get("u_ret");


错误:
13:15:15,781 ERROR [STDERR] com.ibatis.dao.client.DaoException: Failed to execute queryForObject - id [select_info_onlineall], parameterObject [{uid=10020}]. Cause: com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in sqlmap/sql/X_Online.xml.  
--- The error occurred while executing query procedure.  
--- Check the {call p_service.sp_coselectbevy(?,?,?,?)}.  
--- Check the output parameters (register output parameters failed).  
--- Cause: java.sql.SQLException: 无效的列类型

请问下这是哪里的原因导致的呢?静待高人....

------解决方案--------------------
给你一个蠢笨的办法吧
1 修改你的存储过程,减少他们的参数数量
2 修改你的程序,减少调用的参数
3 运行
4 如果成功,则逐个增加参数,直到出现异常,即可确定到底是哪个参数出的问题。

你的参数不多,我想不需要多少测试


------解决方案--------------------
java code贴全一点.

你看你的MAP 中有没有响应的key