我使用以下代码将java数组传递给存储过程
<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数组。但我得到以下错误-->" JdbcType ARRAY参数#1设置null错误。尝试为该参数设置不同的JdbcType或不同的jdbcTypeForNull配置属性。原因:java.sql.SQLException: Invalid column type: sqlType=2003"
谁能帮帮我....
试着这样写你的自定义TypeHandler
public class ArrayTypeHandler implements TypeHandler<YourArrayObject[]>{
}
重写下面的方法来设置oracle.sql.ARRAY为PreparedStatement:-
public void setParameter(PreparedStatement ps, int i,
YourArrayObject[] parameter, JdbcType jdbcType) throws SQLException {}
这个url可以帮助你做同样的事情:-如何使用MyBatis将Java对象列表传递给Oracle存储过程?
同样,重写getResult()方法来获取OUT数组参数