嵌套的异常是com.ibatis.common.jdbc.exception.NestedSQLException:

时间:2019-03-03 16:30:01

标签: java ibatis

我是Java的新手,我试图从Java调用存储过程。

我正在为此代码获取此异常

@SuppressWarnings("unchecked")
List<Object> queryForList(String procName, Map<String, Object> map, CommonVO commonVO) {
    List<Object> resultSetList = null;
    Date connectionAttemptStartDate = null;
    Date cidbQueryStartDate = null;
    List<String> jndiNameList =null;
    String jndiName = null;
    try {
        resultSetList = super.queryForList(procName, map);

    }catch(Exception e) {
        isError = true;
        //exception = e;
        System.out.println(e.getMessage());
        exception=ExceptionUtils.validateCreateCIDBException(e);
    }
    return resultSetList;
 }

我的XML文件在这里

<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="SP">
    <parameterMap id="objectParameters" class="java.util.Map">      
        <parameter property="valueAddedOfferList" jdbcType="VALUE_ADDED_OFFER_LIST" typeName="VALUE_ADDED_OFFER_LIST" typeHandler="com.bam.vision.dao.db.typehandler.ValueAddedOfferListTypeHandlerCallback" mode="OUT" />
        <parameter property="errorCode" jdbcType="INTEGER" javaType="java.lang.String" mode="OUT"/>
        <parameter property="errorMessage" jdbcType="CHAR" javaType="java.lang.String" mode="OUT"/>
    </parameterMap>
    <procedure id="retrieve_value_added_offer" parameterMap="objectParameters" timeout="2">
        {call retrieve_value_added_offer(?,?,?)}
    </procedure>
</sqlMap>

像这里一样获取异常

--- Cause: java.lang.ClassCastException: java.math.BigDecimal    incompatible with java.lang.String; nested exception is     com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred in retrieve_value_added_offer.xml.  
--- The error occurred while applying a parameter map.  
--- Check the SP.objectParameters.  
--- Check the output parameters (retrieval of output parameters failed).  
--- Cause: java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.String

1 个答案:

答案 0 :(得分:0)

您的XML文件中的这一行对我来说可疑:

    <parameter property="errorCode" jdbcType="INTEGER" javaType="java.lang.String" mode="OUT"/>

您的存储过程中的errorCode代码参数是什么类型?

您有jdbcType="INTEGER",这表明它是一个数字,但您也有javaType="java.lang.String",这表明它是一个字符串。显然不能两者兼而有之。您尚未包括存储过程的声明,因此无法确定它实际上是哪个。

如果错误代码是整数,请尝试将javaType="java.lang.String"更改为javaType="java.lang.Integer"(如果失败,则改为javaType="java.math.BigDecimal")。如果您的错误代码是字符串,请将jdbcType="INTEGER"更改为jdbcType="STRING"