使用JDBC在Java中检索2d数组

时间:2011-06-01 03:12:02

标签: java oracle jdbc 2d varray

我有以下类型:

create or replace TYPE mytimestamp AS VARRAY(300) OF TIMESTAMP(6);
create or replace TYPE trade_history_dts_array AS VARRAY(300) OF   mytimestamp;

这些类型在存储过程中以这种方式使用:

trade_history_dts tradehistorydtsarray ;

FOR i IN 1..20
loop
  trade_history_dts(i) := mytimestamp();
    LOOP   
      trade_history_dts(i).extend();
      FETCH trade_history_cursor INTO 
      trade_history_dts(i)(j),
      dbms_output.put_line(trade_history_dts(i)(j)); 

      j := j+1;
      exit when trade_history_cursor%notfound;
    END LOOP;
    j:=1;
end loop;

测试存储过程,我可以得到正确的结果:

贸易信息1

trade_history_dts(1)(1)17-OCT-05 03.49.57.000000 PM
trade_history_dts(1)(2)17-OCT-05 03.49.58.000000 PM

贸易信息2

trade_history_dts(2)(1)27-JUN-05 09.02.59.000000 AM
trade_history_dts(2)(2)27-JUN-05 09.02.59.000000 AM
trade_history_dts(2)(3)27-JUN-05 09.03.01.000000 AM

贸易信息3

trade_history_dts(3)(1)09-FEB-06 09.31.03.000000 AM
trade_history_dts(3)(2)09-FEB-06 09.31.05.000000 AM

....

现在我想在java中获得这个结果,并将其转换为二维数组。

我尝试了以下内容:

Timestamp[][] trade_history_dts = (Timestamp[][])trade_history_dts_arr.getArray();

但它不起作用。有人知道如何将它转换为java中的二维数组吗?谢谢!

1 个答案:

答案 0 :(得分:4)

您采用的方法不起作用,因为它自己的JDBC不支持Oracle的集合类型。您需要处理Oracle JDBC驱动程序中包含的类型的对象,以便以您希望的方式访问结果集的内容。这将涉及将ResultSet对象转换为OracleResultSet,以便可以通过oracle.sql.ARRAY元素的实例访问集合的内部元素。

您还可以使用getObject方法从ResultSet中读取Object,然后将其强制转换为代表集合的oracle.sql.ARRAY实例。有关此机制的详细信息,请参阅Oracle Database JDBC Developer's Guide and Reference

此外,您需要解析结果集中的每个元素,并以类似的方式处理它们,因为您正在返回多级集合。有关详细信息,请参阅the same guide in a separate section