该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
网上很多关于java调用oracle存储过程、函数的例子,大部分例子都是,出参是基本类型和光标类型的,没有type类型的,最近用到了type类型,由于网上没有相关资料,弄了好久才弄好,为了别人不走我踩过的坑,现在说一下type类型的使用方法。
type类型是什么,这里简单介绍一下,详细的请参考oracle的文档。type是用来定义属于自己的类型的,举个例子:你想要定义个user类型,user类型里包涵用户名(varchar2),年龄(number)。。。,这样你就可以定义一个具有多个column的user类型。在存储过程或函数返回的出参就可以使用这个user类型,user会作为一个数组返回,即返回的是多个user类型的多条记录,类似于表格,是不是很神奇
java在调用返回type类型的情况和其他情况不一样,这里说明一下:
首先是在调用proc.registerOutParameter(index, Types.ARRAY, "自定义的type类型,必须大写");时候,第二个参数输出参数,是ARRAY类型的,第三个参数是必须的,是type类型,必须是大写,
其次是在获取返回值的时候,这里直接上代码
ResultSet rs = (ResultSet) cs.getArray(index).getResultSet(); //index要和上面的registerOutParameter方法的index一致
while (rs.next()) {
STRUCT struct = (STRUCT) rs.getObject(2);
Datum[] data = struct.getOracleAttributes();
for(int j=0; j
if (null == data[j]&& "null".equalsIgnoreCase(String.valueOf(data[j])))
continue;
data[j].stringValue() ; //这里根据type里定义的不同的col类型,调用相应的方法获得值
}
}
至此,已经讲完了,其他地方和调用存储过程或函数的时候是一样的,这里就不再赘述了