• 存储结构接收数组


    之前 一直报org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.OracleConnection 后来根据session拿到的connnection 然后再去获取一次con = con.getMetaData().getConnection();

    以下是完整代码:

    ------这里是创建存储过程

    create or replace type enroll as object(
           name varchar2(50),
           idcard varchar2(20),
           sex number(1),
           age number(8),
           place varchar2(50),
           enrolltime date,
           enrollresult varchar2(20),
           enrollfailinfo varchar2(100),
           enrollcanal varchar2(100)
     );
    CREATE OR REPLACE TYPE enrollinfolist as table of enroll;

    -- Create sequence
    create sequence enrollinfo_ID
    minvalue 1
    maxvalue 99999999
    start with 1
    increment by 1;
    --过程
    create or replace procedure pullenrollinfo(
     enrollinfo in enrollinfolist
    )
    is
    v_sql varchar2(200);
     num number:=0;
    begin
      for i in 1..enrollinfo.count loop
         v_sql:= 'select count(*) from enrollinfo where IDcard='||enrollinfo(i).idcard;
        execute immediate v_sql into num;
        if num>0 then
          update enrollinfo set  name=enrollinfo(i).name ,sex=enrollinfo(i).sex , age=enrollinfo(i).age ,place=enrollinfo(i).place  ,enrolltime=enrollinfo(i).enrolltime ,enrollresult=enrollinfo(i).enrollresult   ,enrollfailinfo=enrollinfo(i).enrollfailinfo  ,enrollcanal=enrollinfo(i).enrollcanal   where IDcard=enrollinfo(i).idcard;
          else
      insert into enrollinfo(id,name,idcard,sex,age,place ,enrolltime,enrollresult,enrollfailinfo,enrollcanal)values(enrollinfo_ID.nextval,enrollinfo(i).name,enrollinfo(i).idcard,enrollinfo(i).sex
      ,enrollinfo(i).age,enrollinfo(i).place,enrollinfo(i).enrolltime,enrollinfo(i).enrollresult,enrollinfo(i).enrollfailinfo,enrollinfo(i).enrollcanal);
    end if ;
     if mod(i,500)=0 then
        commit;
        end if;
      end loop;
      commit;
      end pullenrollinfo;

    ----java代码

        public void insertClientData(List<Enrollinfo> infos) {
            Connection con = null;
            CallableStatement stmt = null;
            try {
                con = SessionFactoryUtils.getDataSource(
                        this.getHibernateTemplate().getSessionFactory())
                        .getConnection();

                con = con.getMetaData().getConnection();
                List<STRUCT> structs = new ArrayList<STRUCT>();
                ARRAY array = getArray(con, "ENROLL", "ENROLLINFOLIST", infos);
                stmt = con.prepareCall("{call pullenrollinfo(?)}");
                stmt.setArray(1, array);
                stmt.execute();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                log.error("拉取客户信息出错:" + e);
            } finally {
                if (stmt != null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (con != null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

        }

    public ARRAY getArray(Connection con, String OraObjType, String OraArrType,
                List<Enrollinfo> infos) throws Exception {
            ARRAY list = null;
            if (infos != null && infos.size() > 0) {
                // Oracle识别的集合对象,匹配java对象集合
                STRUCT[] structs = new STRUCT[infos.size()];

                // Oracle识别的对象模板,匹配单个java对象
                StructDescriptor structdesc = new StructDescriptor(OraObjType, con);

                // 遍历stuList,将每个Student对象转换为Oracle可识别的模板对象
                for (int i = 0; i < infos.size(); i++) {
                    // java对象
                    Enrollinfo  info= infos.get(i);

                    // 数组大小应和你定义的数据库对象(STUDENT)的属性的个数
                    Object[] tObject = new Object[9];
                    tObject[0] = info.getName();
                    tObject[1] = info.getIdCard();
                    tObject[2] = info.getSex();
                    tObject[3] = info.getAge();
                    tObject[4] = info.getPlace();
                    tObject[5] = new Date(123);
                    tObject[6] = info.getEnrollResult();
                    tObject[7] = info.getEnrollFailInfo();
                    tObject[8] = info.getEnrollCanal();
                    structs[i] = new STRUCT(structdesc, con, tObject);
                }

                // 匹配list
                ArrayDescriptor desc = ArrayDescriptor.createDescriptor(OraArrType,
                        con);
                list = new ARRAY(desc, con, structs);
            }
            return list;
        }

  • 相关阅读:
    TP框架实现分页及条件查询
    tp框架连贯操作
    php查询
    php修改数据
    php增加数据处理
    php删除数据
    php怎么访问数据库
    php查询
    克隆及加载类
    php静态成员和接口
  • 原文地址:https://www.cnblogs.com/xiaohuachen/p/8640621.html
Copyright © 2020-2023  润新知