ibatisMap

7kqas0il  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(301)

对于返回真/假值的oracle存储过程,我有以下ibatisMap。

<resultMap id="isAuthorizedResult" class="java.lang.Boolean">
    <result property="isAuthorized" column="isAuthorized"/>
  </resultMap>
  <parameterMap id="isAuthorizedCall" class="map">
    <parameter property="prgType" jdbcType="String" javaType="java.lang.String" mode="IN"/>
    <parameter property="parCode" jdbcType="String" javaType="java.lang.String" mode="IN"/>
    <parameter property="userId" jdbcType="String" javaType="java.lang.String" mode="IN"/>
    <parameter property="Result0" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="isAuthorizedResult"/>
  </parameterMap>
<procedure id="isAuthorized" parameterMap="isAuthorizedCall">{call chk_user_ocpncy (?,?,?,?) }</procedure>

我从java代码中调用Map,如下所示:

getSqlMapClientTemplate().queryForObject("reexamination.isAuthorized", paramMap);

但是,我得到以下错误。。。

Fail to convert to internal representation; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:

我做错什么了?我们不能将布尔值直接存储到游标中吗?

col17t5w

col17t5w1#

oracle jdbc不支持返回布尔类型。或者更具体地说,它不能用于oracle中的任何结果集(在pl/sql中可以使用布尔值,但不能在ref游标中返回它,也不能将列声明为“boolean”类型)。
听起来像是说ref游标包含布尔值?如果是,您需要返回“y”或“n”或类似的内容。请考虑发布存储过程的源代码/签名-这将有助于回答问题。
http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#34_05
汤姆·凯特传统上厚颜无耻的回答是:你问了
给你一个很短的,汤姆:
为什么oracle rdbms没有布尔数据类型?
我们说。。。
自…,标志字符(1)检查(标志在('y','n'))。。。,
服务于同样的目的,需要同样的空间,做同样的事情-我想我们觉得这是一个功能,我们可以让他们有,我们真的不需要。
我的意思是-你从“访问”中的一列中得到了什么布尔值?正确/错误。我们会给你y/n——如果你想要真/假,我们可以用decode(flag,'y','true','n','false')轻松地完成

相关问题