【问题标题】:Retrieving a 2d varray in Java with JDBC使用 JDBC 在 Java 中检索 2d varray
【发布时间】:2011-06-01 03:12:02
【问题描述】:

我有以下几种:

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中将其转换为二维数组吗?谢谢!

【问题讨论】:

    标签: java oracle jdbc 2d varray


    【解决方案1】:

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

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

    此外,您需要解析结果集中的每个元素,并以类似的方式处理它们,因为您将返回一个多级集合。 the same guide in a separate section 中提供了这方面的详细信息。

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2020-01-10
      • 2021-03-28
      • 1970-01-01
      • 2011-03-28
      • 2011-02-24
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多