【问题标题】:Error with Structs and Arrays in JavaJava中的结构和数组错误
【发布时间】:2021-10-15 00:30:52
【问题描述】:

使用 Structs 和 Arrays 处理对象列表时出错。

java.lang.ClassCastException: oracle.sql.StructDescriptor cannot be cast to oracle.sql.ArrayDescriptor

代码如下:

List<Commission> commissions = (List<Commission>) parameter;

Struct[] structs = new Struct[commissiones.size()];
for (int index = 0; index < comisions.size(); index++) {
    Object[] params = new Object[9];

    Commission commission = commissions.get(index);

    /* Setting parameters */

    Struct struct = ps.getConnection().createStruct("T_COMMISSION", params);
    structs[index] = struct;
}

Array array = ((OracleConnection)ps.getConnection()).createOracleArray("C_COMMISSION", structs);

ps.setArray(i, array);  

编辑,添加 T_COMMISSION:

CREATE OR REPLACE TYPE GESFIN.T_COMMISSION AS OBJECT (COM_MZN VARCHAR2(3),
                                                      COM_PVP VARCHAR2(8),
                                                      -- ..More params)
/

CREATE TYPE C_COMMISSION AS TABLE OF T_COMMISSION
/

【问题讨论】:

  • 在哪一行抛出异常?
  • Struct struct = ps.getConnection().createStruct("T_COMMISSION", params); structs[index] = struct;
  • 如果您能提供 T_COMMISSION 的定义,将会有所帮助。它是 ADT 还是 ARRAY 或其他类型的 PLSQL 集合?
  • 问题已编辑

标签: java arrays oracle struct


【解决方案1】:

Link to post with the same case

添加

Struct[] struct = new Struct[params.size()];

改变

Struct struct = ps.getConnection().createStruct("T_COMMISSION", params);

struct[index] = ps.getConnection().createStruct("T_COMMISSION", params);

【讨论】:

  • structs 数组已经存在。应该重新创建吗?
【解决方案2】:

尝试反向 if 循环 for (int index = commision.size(); index &gt; -1; index--) {

另外你有一个打字错误,这是佣金,而不是佣金...仔细检查你的代码并获取插件/扩展程序/广告来检查此类错误。

最好的问候 :-)

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多