2011-06-01 60 views
1

我有以下幾種類型:檢索Java中的2D VARRAY用JDBC

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中的二維數組?謝謝!

回答

4

您採用的方法將無法正常工作,因爲它自己的JDBC不支持Oracle的集合類型。您需要處理包含在Oracle JDBC驅動程序中的類型對象,以便按照您希望的方式訪問結果集的內容。這包括將ResultSet對象轉換爲OracleResultSet,以便可以通過oracle.sql.ARRAY元素的實例訪問集合的內部元素。

也可以使用getObject方法從結果集中讀取對象,然後將其轉換爲表示集合的oracle.sql.ARRAY實例。有關此機制的詳細信息,請參閱Oracle Database JDBC Developer's Guide and Reference

此外,您需要解析結果集中的每個元素,並以類似的方式處理它們,因爲您正在返回多級集合。詳細信息請參見the same guide in a separate section