1

我正在使用以下代码将 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:无效的列类型: sqlType=2003 "

有人可以帮忙吗....

提前致谢...

4

1 回答 1

2

尝试编写您的自定义类型处理程序,例如

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 数组参数

于 2013-11-19T10:33:42.490 回答