如何避免此异常?java.sql.SQLException: 无法转换为内部表示形式。

5
我的代码在以下行(此处的第二行)抛出上述异常:
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文档:其中intArray是一个oracle.sql.ARRAY,对应于类型为NUMBER的VARRAY。值数组包含java.math.BigDecimal类型的元素数组,因为根据Oracle JDBC驱动程序,默认情况下SQL NUMBER数据类型映射到Java BigDecimal。
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接