5

私のコードは、次の行 (この行 2) で上記の例外をスローしています。

final ArrayDescriptor tParamArrayDescriptor = ArrayDescriptor.createDescriptor("MY_SYSTEM.T_PARAM_ARRAY", databaseHandler.getConnection());
final ARRAY oracleArray = new ARRAY(tParamArrayDescriptor, databaseHandler.getConnection(), myObjects.toArray());

それは私に次の例外を与えます:

java.sql.SQLException: Fail to convert to internal representation: 

これmyObjectsは、次の POJO の ArrayList です。

public class MyObject
{
    private String name;
    private String surname;

    private int age;

    ...

    // Accessors etc..

}

データベース上のT_PARAM_ARRAYは次のようになります。

create or replace
TYPE               T_PARAM_ARRAY AS OBJECT (NAME VARCHAR2(50), SURNAME VARCHAR2(50), AGE NUMBER(1));

調査の結果、POJO とデータベース タイプの間のデータ タイプ マッピングが正しく一致していないと思います。String が VARCHAR2 に一致していることはかなり確信していますが、 を に変換する際に問題があると思いintますNUMBER

BigDecimal を使用してみましたが、状況は改善されませんでした。

助言がありますか?

EDIT: Oracleのドキュメントによると:Where intArray is an oracle.sql.ARRAY, corresponding to a VARRAY of type NUMBER. The values array contains an array of elements of type java.math.BigDecimal, because the SQL NUMBER datatype maps to Java BigDecimal by default, according to the Oracle JDBC drivers.

4

1 に答える 1

2

自分で配列を作成する必要があると思います。この質問「Javaでユーザー定義型を含むOracleストアドプロシージャを呼び出す方法」を参照してください。実例として。

于 2010-11-24T17:22:22.833 に答える