java怎么从oracle存储过程接收对象数组与二维数组

 我来答
好程序员
2016-05-29 · HTML5前端培训/大数据培训/Java
好程序员
好程序员是IT高端课程培训基地,从平凡到卓越,为梦想而拼搏。
向TA提问
展开全部
//如果你使用JDBC,
//你可以强转conn为oracleConnection也可以像我一样强转CallableStatement为OracleCallableStatement。
//但如果你使用诸如tomcat的DBCP等连接池请首先转换为native连接,然后转换为oracle连接,直接强转是无效的!
//(最后释放关闭的连接是连接池的连接而不是oracle的连接)
conn = DbHelperImpJdbc.getInstance().getConn();
cs = (OracleCallableStatement) conn.prepareCall("{call PKG_DEMO.GETBEAN_OBJTABLE(?)}");
cs.registerOutParameter(1, OracleTypes.ARRAY, "PERSON_TABLE_TYPE".toUpperCase());
ARRAY obj = (ARRAY) cs.getArray(1);
Datum[] datas = obj.getOracleArray();//获取对象
//遍历对象数组
for(int i=0;i<datas.length;i++){
System.out.println("对象"+i);
//获取属性
Object[] beanAttributes = ((STRUCT) datas[i]).getOracleAttributes();
//遍历属性
for(int m=0;m<beanAttributes.length;m++){
System.out.println(" "+beanAttributes[m]);
}
}

打印结果:
对象0
232311232321
第1代
201
2010-1-11
对象1
232311232322
第2代
202
2010-1-12
对象2
232311232323
第3代
203
2010-1-13
对象3
232311232324
第4代
204
2010-1-14
对象4
232311232325
第5代
205
2010-1-15

接下来我们来看看怎么从过程中接收二维数组,由于二维数组的接收网上资料很少,通过自己的研究发现二维数组可以先转换成一维数组,然后每个元素再逆向转换成Oracle.ARRAY,再然后按照一维数组如法炮制。

Sql代码
--建立一维数组
--PS也请使用NVARCHAR2
CREATE OR REPLACE TYPE TYPE_VARCHAR IS TABLE OF NVARCHAR2(2000)
--建立二维数组
CREATE OR REPLACE TYPE TYPE_VARCHAR_TABLE IS TABLE OF TYPE_VARCHAR
--建立测试用过程
PROCEDURE GETBEAN_ARRAYTABLE(V_TABLE OUT TYPE_VARCHAR_TABLE)
AS
BEGIN
V_TABLE:=TYPE_VARCHAR_TABLE();
FOR I IN 1 .. 5 LOOP
V_TABLE.EXTEND;
V_TABLE(I):=NEW TYPE_VARCHAR('23231123232'||I,
' 第'||I||'代',
'20'||I,
'2010-1-1'||I);
END LOOP;
END;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式