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

カスタム 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 配列パラメーターを取得します。

于 2013-11-19T10:33:42.490 に答える