在java中处理oracle中的对象数组(嵌套表)

在java中处理oracle中的对象数组(嵌套表):

sp文件:

------------------------------- Create Object Type ----------------------------------
create   or   replace  type o_tmp  as  object (
userid 
varchar2 ( 10 ),
username 
varchar2 ( 20 )
);
/

--------------------------- Create Nested Table Type  On Base Object Type------------------------
create   or   replace  type tmp_array  is   table   of  o_tmp;
/

 ---------------------------- Create a Package File -----------------------------------------------------------
create   or   replace  package body test_object
as
procedure  getObject(obj_arr out tmp_array)
is
tmp_obj o_tmp;
test_arr tmp_array :
=  tmp_array();
number  : =   1 ;
begin

loop
exit   when  n  >   5 ;

tmp_obj :
=  o_tmp( ' test1 '   ||  n,  ' fuyue '   ||  n);

test_arr.extend;
test_arr(n) :
=  tmp_obj;
n :
=  n  +   1 ;

end  loop;

obj_arr :
=  test_arr;

for  n  in  obj_arr.first .. obj_arr.last loop
tmp_obj :
=  obj_arr(n);
dbms_output.put_line(tmp_obj.userid 
||   '  ---  '   ||  tmp_obj.username);
end  loop;

end  getObject;
end  test_object;
/

 

java文件:

import  java.sql.Array;
import  java.sql.CallableStatement;
import  java.sql.DriverManager;
import  java.sql.SQLException;

import  oracle.jdbc.OracleConnection;
import  oracle.jdbc.driver.OracleTypes;
import  oracle.sql.Datum;
import  oracle.sql.STRUCT;

public   class  ObjArray  {
    
private static String strDriver = "oracle.jdbc.driver.OracleDriver";

    
private static String strUrl = "jdbc:oracle:thin:@192.160.10.14:1521:avex";

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        test();
    }


    
private static void test() {
        
try {
            Class.forName(strDriver);
            OracleConnection con 
= (OracleConnection) DriverManager
                    .getConnection(strUrl, 
"avex""avex");
            CallableStatement stmt 
= null;

            stmt 
= con.prepareCall("{call test_object.getObject(?)}");
            stmt.registerOutParameter(
1, OracleTypes.ARRAY, "TMP_ARRAY");

            stmt.execute();

            Array outparam 
= stmt.getArray(1);

            Object[] obj 
= (Object[]) outparam.getArray();

            
for (int i = 0; i < obj.length; i++{
                STRUCT struct 
= (STRUCT) obj[i];
                Datum[] dt 
= struct.getOracleAttributes();

                
for (int n = 0; n < dt.length; n++{
                    System.out.println(dt[n]);
                }

            }


        }
 catch (ClassNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
 catch (SQLException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值