如何防止此异常? java.sql.SQLException:无法转换为内部表示:

时间:2010-11-24 14:53:26

标签: java oracle sqlexception

我的代码在以下行中抛出了上述异常(第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,但这并没有改善这种情况。

有什么建议吗?

编辑:根据Oracle documentationWhere 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.

1 个答案:

答案 0 :(得分:2)

我认为您需要自己构建数组,请参阅此问题"How to call oracle stored procedure which include user-defined type in java?"以获取实际示例。