我的代码在以下行(本行的第 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 documentation : 其中 intArray 是一个 oracle.sql.ARRAY,对应于一个 NUMBER 类型的 VARRAY。 values 数组包含 java.math.BigDecimal 类型元素的数组,因为根据 Oracle JDBC 驱动程序,SQL NUMBER 数据类型默认映射到 Java BigDecimal。
最佳答案
我觉得你需要自己建数组,看这个问题"How to call oracle stored procedure which include user-defined type in java?"一个工作示例。
关于java - 我怎样才能防止这个异常(exception)? java.sql.SQLException : Fail to convert to internal representation: 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268093/