java - 我怎样才能防止这个异常(exception)? java.sql.SQLException : Fail to convert to internal representation: 异常

标签 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 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/

相关文章:

java - 理解这个 Java 程序的执行流程

java - 使用 Oracle SQL Developer 调用存储过程

c# - 如何知道抛出 SqlException 的实际问题?

SQL:将计数与 Clob 结合使用

c# - 与 DBMS 中的索引相关的 "pinning"到底是什么?

C# try catch 混淆

java - 接收 SQLException "Login failed for user"连接到 SQL Server 2008

java - SWT 表 - 选择行后取消选择行

java - Androidplot - 在绘图区域内定位范围标签

java - 短路评估的性能影响