这里用的是spring-jdbc.jar
public class getAllOrdersStore extends org.springframework.jdbc.object.StoredProcedure{
public getAllOrdersStore (javax.sql.DataSource dataSource){
super(dataSource, "GET_ALL_ORDERS");//get_all_orders是存储过程名
//为存储过程做参数名以及参数类型声明
this.declareParameter(new SqlParameter("ORDER_ID", Types.VARCHAR));
this.declareParameter(new SqlParameter("ORDER_TYPE", Types.NUMERIC));
this.declareParameter(new SqlParameter("PRODUCT_TYPE", Types.ARRAY,T_PRODUCT_ARRAY))
this.declareParameter(new SqlOutParameter("ORDERS_RESULT", OracleTypes.CURSOR, new GetAllOrderMapper())); //存储过程输出结果是游标,GetAllOrderMapper 类负责把存储过程的结果映射到具体的Order类
this.declareParameter(new SqlOutParameter("IS_SUCCESS", Types.VARCHAR)); //输出是否执行成功
this.compile();
}
//method 为存储过程参数赋值
public Map<String,?> execute(String orderID,final List<String> productTypes,String orderType){
final Map<String,Object> params = new HashMap<String,Object>();
input.put("PRODUCT_TYPE", new AbstractSqlTypeValue() {
@Override
protected Object createTypeValue(Connection conn, int sqlType, String typeName) throws SQLException {
ARRAY array = null;
if (conn.isWrapperFor(oracle.jdbc.OracleConnection.class)) {
oracle.jdbc.OracleConnection oraCon = conn.unwrap(oracle.jdbc.OracleConnection.class);
ArrayDescriptor descriptor = new ArrayDescriptor(typeName, oraCon);
array = new ARRAY(descriptor, oraCon, productTypes.toArray());
}
return array;
}
});
params.put("ORDER_ID", orderID);
params.put(""ORDER_TYPE"", orderType);
return super.execute(params);
}