/** * 调用存储过程批量插入照片 * @param jwxhs 照片名字(不带后缀)数组集合,也就是学生教务学号集合(eg.123 不是123.jpg) * @param undirectoryPath 照片对应的文件夹路径 */ private void synaZp(String[] jwxhs, String undirectoryPath) { CallableStatement stmt = null; //本地学工系统存储器调用处理 XsxxglAMImpl am = (XsxxglAMImpl) ADFUtils.getApplicationModuleForDataControl("XsxxglAMDataControl"); Connection cn; try { cn = am.getDBTransaction().createStatement(0).getConnection(); //定义数据库中对象数组类型 ArrayDescriptor desc = ArrayDescriptor.createDescriptor("TYPE_JWXH_VARCHAR2", cn); String batchSQL = "begin xjxxgl_syncZp(?, ?, ?); end;"; stmt = am.getDBTransaction().createCallableStatement(batchSQL, 0); ARRAY jwxh_RXNY = new ARRAY(desc, cn, jwxhs); stmt.setObject(1, jwxh_RXNY); stmt.setObject(2, undirectoryPath); stmt.registerOutParameter(3, Types.NUMERIC); stmt.execute(); System.out.println("导入数量:"+stmt.getString(3)); if (!stmt.getString(3).equals("0")) { am.getDBTransaction().commit(); } JSFUtils.addFacesInformationMessage("导入完成,共导入" + stmt.getString(3) + "条图片"); } catch (java.sql.SQLException s) { s.printStackTrace(); throw new oracle.jbo.JboException(s); } catch (Exception e) { } finally { try { if (stmt != null) { stmt.close(); } } catch (java.sql.SQLException s2) { throw new oracle.jbo.JboException(s2); } } }
需要定义数据库中的数组类型;
Connection cn;
cn = am.getDBTransaction().createStatement(0).getConnection();
//定义数据库中对象数组类型
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("TYPE_JWXH_VARCHAR2", cn);
ARRAY jwxh_RXNY = new ARRAY(desc, cn, jwxhs);
stmt.setObject(1, jwxh_RXNY);
-----------
jwxhs为字符串的数组;
create or replace procedure xjxxgl_syncZp(p_jwxhs IN TYPE_JWXH_VARCHAR2, p_path IN VARCHAR2, p_count out NUMBER) is /** * 学生照片批量插入 * 2015年9月7日 p_jwxhs 学生学号字符串数组集 p_path 照片存放的文件夹路径 p_count 统计插入照片条数 */ TYPE XSCUR IS REF CURSOR; --定义类型变量 CUR_XS XSCUR; --引用游标的数据类型 --这种变量通常用于存储过程和函数返回结果集时使用, --因为PL/SQL不允许存储过程或函数直接返回结果集,但可以返回类型变量, --于是引用游标的类型变量作为输出参数或返回值 XSTEMP_XH VARCHAR2(30); count_start number; --记录批量插入前数量 count_end number; --记录批量插入后数量 BEGIN select count(*) into count_start from xsxxgl_xsjbxx WHERE zppath is not null; FOR I in p_jwxhs.first .. p_jwxhs.last LOOP OPEN CUR_XS FOR SELECT xs.jwxh FROM xsxxgl_xsjbxx xs WHERE xs.jwxh = p_jwxhs(I) and xs.zppath is null; FETCH CUR_XS INTO XSTEMP_XH; --判断学生照片是否为空,如果为空插入新的照片路径,不为空则不操作 IF CUR_XS% FOUND THEN --如果学生照片为空则插入 --用户信息表 UPDATE xsxxgl_xsjbxx YH SET YH.Zppath = '/imageservlet?path='||p_path||'/'||p_jwxhs(I)||'.jpg' WHERE YH.Jwxh = p_jwxhs(I); END IF; CLOSE CUR_XS; END LOOP; --统计插入数量 select count(*) into count_end from xsxxgl_xsjbxx WHERE zppath is not null; p_count := count_end - count_start; exception when others then raise; rollback; END xjxxgl_syncZp;
-------功能摘自学工系统,学生信息管理,照片批量上传