我是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
答案 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"
。