Spring Mybatis -在mapper.xml中发送数组作为过程调用的输入参数



我使用以下代码将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数组参数

最新更新