如何把java中的arrayList转化为oracle中的数组(array) --转

来源:互联网 发布:淘宝最美网红 编辑:程序博客网 时间:2024/05/23 01:59

在写存储过程中经常会遇到把java中的arrayList转化为oracle中数组,(arrayList中存的是一些java对象)简单总结一下.
例:arrayList中存在一些people对象
1.首先要在数据库中建立相应的java对象和数组,
如: /* 和java对象对应的数据库对象 */
CREATE TYPE peopleOracleObject AS OBJECT
(
  peopleOracleID NUMBER(8) ,
  nameOracle varchar(50) ,
  ageOracle Number(3)
)
/ 数据库中的array
CREATE TYPE people_Oracle_LIST AS VARRAY(500) OF peopleOracle ;
/

2.将java中的arrayList转化
private static ARRAY getOracleArray(Connection con, String Oraclelist,
ArrayList objlist) throws Exception {
  ARRAY list = null;
  if (objlist != null && objlist.size() > 0) {
  StructDescriptor structdesc = new StructDescriptor(
  "peopleOracleObject", con);
  STRUCT[] structs = new STRUCT[objlist.size()];
  Object[] result = new Object[0];
  for (int i = 0; i < objlist.size(); i++) {
  result = new Object[2];
  result[0] = new Long(((people)(objlist.get(i))).getPeopleID());
  result[1] = new Long(((people)(objlist.get(i))).getPeopleName());
  result[2] = new Long(((people)(objlist.get(i))).getPeopleAge());
  structs[i] = new STRUCT(structdesc, con, result);
}
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,
 con);
list = new ARRAY(desc, con, structs);
} else {
 ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,
con);
 STRUCT[] structs = new STRUCT[0];
 list = new ARRAY(desc, con, structs);
}
return list;
} // function

3./*把转换后的数组加到存储过程中*/
public static int updateADInfo(ArrayList peoleList, int ID){
Connection con = null;
CallableStatement stmt = null;
int backVal;
 try {
  con = pool.getConnection();
  if (con != null) {
  stmt = con.prepareCall("{call updatePeople(?,?,?)}");
  ARRAY adArray = getOracleArray(con, "people_Oracle_LIST", 
  peoleList);
  ((OracleCallableStatement) stmt).setARRAY(1, adArray);
  stmt.setInt(2, ID);
  stmt.registerOutParameter(3, java.sql.Types.INTEGER);
  stmt.execute();
} else {
 backVal = 1;
}
} catch (Exception e) { 
  e.printStackTrace();
} finally {
pool.freeDBResource(con, stmt, null);
}
 return backVal;
}


4.存储过程中调用
CREATE OR REPLACE PROCEDURE NAD_SP_CreateWebCostToAd(
p_peopleArray IN people_Oracle_LIST,
p_ID IN number,
p_out OUT VARCHAR2
)
AS
VpeopleID number(8) :=0;
VpeopleName varchar(50):=0;
Vage number(3):=0;
begin
for i 1...p_peopleArray.count loop
  peopleObj :=p_peopleArray(i);
  VpeopleID := peopleObj.peopleOracleID;
  VpeopleName := peopleObj.nameOracle;
  Vage :=peopleObj.ageOracle;

.................

 end loop;
 commit;
EXCEPTION
WHEN OTHERS THEN
p_out:='-1' || SQLERRM;
ROLLBACK;
END;

/
SHOW ERRORS

 
原创粉丝点击