我的代码在以下行(此处的第二行)抛出上述异常:
数据库中的
经过一些研究,我认为我的POJO和数据库类型之间的数据类型映射不正确。我相当有信心String可以正确匹配到VARCHAR2,但我认为将int转换为NUMBER存在问题。
我尝试使用BigDecimal,但情况没有改善。
有什么建议吗?
编辑:根据Oracle文档:其中intArray是一个oracle.sql.ARRAY,对应于类型为NUMBER的VARRAY。值数组包含java.math.BigDecimal类型的元素数组,因为根据Oracle JDBC驱动程序,默认情况下SQL NUMBER数据类型映射到Java BigDecimal。
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。