/**
* 调用存储过程批量插入照片
* @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;
-------功能摘自学工系统,学生信息管理,照片批量上传