把 arrayList转换成Oracle Array (存储过程参数Array)

这里用的是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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值