我试图从Java中的Oracle存储过程返回一个对象数组,需要一些关于从数组中获取单个对象的建议

tyu7yeag  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(113)

0
我试图从Java中的Oracle存储过程调用返回对象的数组。
我在DB中创建了一个OBJECT类型。这是有5个属性
创建了一个TABLE类型的对象。(因为我会返回多个对象)
我已经设法在Object数组中获得了输出。
我的挑战是,我无法从对象数组中引用每个单独的对象。
stmt.registerOutParameter(8,Types.ARRAY,“XXXXX.T_LAC_TAB”);
stmt.execute();

ARRAY simpleArray = (ARRAY) stmt.getArray(8);

 //Map map1 = con.getTypeMap();

 //map1.put("XXXXX.T_LAC_TAB_O", ExpectedLacDataType.class);

 //con.setTypeMap(map1);

 System.out.println("Till here");

Object[] values = (Object[])simpleArray.getArray();//working fine

字符串
在我得到了对象的值数组之后,我该如何前进?
我尝试创建一个自定义的java类,并尝试将setTypemap设置为关联的java类,但无法使其工作。
我不能在这里粘贴代码的细节,但是,基本上,我只需要知道如何,
1.我可以从返回的对象数组中获取单个对象,并访问检索对象的每个属性

2q5ifsrm

2q5ifsrm1#

final StructDescriptor structDescriptor = StructDescriptor.createDescriptor("XXXXX.XXX_T", con);
        final ResultSetMetaData metaData = structDescriptor.getMetaData();

        stmt.execute();

        Object[] data = (Object[]) ((Array) stmt.getObject(8)).getArray();
        System.out.println("ata.length"+data.length);

            for (Object tmp : data) {
                if (tmp != null) {
                    System.out.println("Object" + tmp);
                    Struct row = (Struct) tmp;
                    int i = 1;
                    for (Object attribute : row.getAttributes()) {

                        if (metaData.getColumnName(i).equals("CSR_ID"))
                            System.out.println(metaData.getColumnName(i) + " = " + attribute);
                        if (metaData.getColumnName(i).equals("ACCOUNT_NUMBER"))
                            System.out.println(metaData.getColumnName(i) + " = " + attribute);
                        if (metaData.getColumnName(i).equals("IBB"))
                            System.out.println(metaData.getColumnName(i) + " = " + attribute);
                        if (metaData.getColumnName(i).equals("ICR_LOAN_TYPE"))
                            System.out.println(metaData.getColumnName(i) + " = " + attribute);
                        if (metaData.getColumnName(i).equals("ALLOCATION"))
                            System.out.println(metaData.getColumnName(i) + " = " + attribute);
                        if (metaData.getColumnName(i).equals("TOTAL_REPAY"))
                            System.out.println(metaData.getColumnName(i) + " = " + attribute);
                        i++;
                    }
                }
            }

字符串

相关问题