public String addplaninfolist(String eventId, String advise, ArrayList P_ARR) {
Object[] tmp = new Object[P_ARR.size()];
for (int i = 0; i < tmp.length; i++) {
Object[] tmparc = new Object[3];
ASObject aso = (ASObject) P_ARR.get(i);
//必须与数据库中的TYPE名称一致
String PLANNAME = (String) (aso.get("name"));// 预案名称
String PLANSIZE = (String) (aso.get("size"));// 大小
String PLANTYPE = (String) (aso.get("type"));// 类型
tmparc[0] = PLANNAME;
tmparc[1] = PLANSIZE;
tmparc[2] = PLANTYPE;
tmp[i] = tmparc;
}
// 进行插入
String state = addplaninfo(eventId, advise, tmp);
return state;
}
public String addplaninfo(String eventId, String advise, Object[] obj) {
Connection conn = DbManager.getInstance().getConnection();
CallableStatement stmt = null;
ResultSet rs = null;
String state = "";
try {
//处理Type
ArrayDescriptor arrayDept = ArrayDescriptor.createDescriptor(
"TP_PLANINFOLIST", conn);
STRUCT[] laneArray = new STRUCT[obj.length];
ARRAY arrayObject = null;
StructDescriptor st = new StructDescriptor("OBJ_PLANINFOLIST", conn);//连接
//类型转换
for (int i = 0; i < obj.length; i++) {
STRUCT st2 = new STRUCT(st, conn, (Object[]) obj[i]);
laneArray[i] = st2;
}
arrayObject = new ARRAY(arrayDept, conn, laneArray);
stmt = conn
.prepareCall("call YJCZPKG.INSERT_PLANINFOLIST(?,?,?,?)");
stmt.setString(1, eventId);
stmt.setString(2, advise);
stmt.setArray(3, arrayObject);
stmt.registerOutParameter(4, OracleTypes.VARCHAR);
stmt.execute();
state = stmt.getString(4);
} catch (Exception e) {
System.out.println(e.toString());
} finally {
try {
DbManager.closeAll(rs, stmt, conn);
} catch (Exception e) {
System.out.println(e.toString());
}
}
return state;
}
2、数据库Type
CREATE OR REPLACE TYPE TP_PLANINFOLIST AS TABLE OF OBJ_PLANINFOLIST;//创建type
//创建数组
CREATE OR REPLACE TYPE OBJ_PLANINFOLIST AS OBJECT
(
PLANNAME VARCHAR2(100), --附件名称
PLANSIZE VARCHAR2(20), --附件大小
PLANTYPE VARCHAR2(20) --附件类型
)