2013-04-12 76 views
1

我使用的是用於傳遞Java數組存儲過程春天的MyBatis - 在mapper.xml

<select id="abcd" parameterType="java.util.Map" statementType="CALLABLE"> 
    {call PKG_xyz.PR_cbcd(
     #{p_array,jdbcType=ARRAY,typeHandler=org.apache.ibatis.type.ArrayTypeHandler,mode=IN}, 
     #{p_ids,jdbcType=INTEGER,mode=IN}, 
     #{p_comments,jdbcType=VARCHAR,mode=IN}, 
     #{p_return_code,jdbcType=INTEGER,mode=OUT}, 
     #{p_msg_out,jdbcType=VARCHAR,mode=OUT} 
    )} 
</select> 

這裏將以下代碼發送數組作爲輸入參數,過程調用,p_array是我的Java數組。但我發現了以下錯誤 - > 「爲參數#1的jdbcType ARRAY 錯誤設置爲null嘗試設置此參數或不同jdbcTypeForNull配置屬性不同的jdbcType原因:值java.sql.SQLException:無效的列。類型:則sqlType = 2003

可能有人請幫助....

在此先感謝...

回答

2

嘗試寫這樣

public class ArrayTypeHandler implements TypeHandler<YourArrayObject[]>{ 
} 
您的自定義類型處理器

覆蓋下面這個方法來oracle.sql.ARRAY設定的PreparedStatement: -

public void setParameter(PreparedStatement ps, int i, 
      YourArrayObject[] parameter, JdbcType jdbcType) throws SQLException {} 

此網址可能幫你做的一樣: - How to Pass Java List of Objects to Oracle Stored Procedure Using MyBatis?

同樣,覆蓋getResult()方法來獲取OUT陣列放慢參數