我的代码在以下行(第 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:
The myObjects
是以下 POJO 的 ArrayList:
public class MyObject
{
private String name;
private String surname;
private int age;
...
// Accessors etc..
}
The 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
to a NUMBER
.
我尝试过使用 BigDecimal,但这并没有改善情况。
有什么建议么?
编辑:根据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.