java中的arrayList传入oracle中的以数组(array)为参数的存储过程

在写存储过程中经常会遇到把java中的arrayList转化为oracle中数组,(arrayList中存的是一些java对象)简单总结一下.
例:arrayList中存在一些people对象
1.首先要在数据库中建立相应的java对象和数组,
如: /* 和java对象对应的数据库对象 */

  1. CREATE TYPE peopleOracleObject AS OBJECT 
  2. (
  3.   peopleOracleID NUMBER(8) , 
  4.   nameOracle varchar(50) , 
  5.   ageOracle Number(3)

/ 数据库中的array

  1. CREATE TYPE people_Oracle_LIST AS VARRAY(500) OF peopleOracle ;

/

2.将java中的arrayList转化

  1. private static ARRAY getOracleArray(Connection con, String Oraclelist,
  2. ArrayList objlist) throws Exception {
  3.   ARRAY list = null;
  4.   if (objlist != null && objlist.size() > 0) {
  5.   StructDescriptor structdesc = new StructDescriptor(
  6.   "peopleOracleObject", con);
  7.   STRUCT[] structs = new STRUCT[objlist.size()];
  8.   Object[] result = new Object[0];
  9.   for (int i = 0; i < objlist.size(); i++) {
  10.   result = new Object[2]; 
  11.   result[0] = new Long(((people)(objlist.get(i))).getPeopleID());
  12.   result[1] = new Long(((people)(objlist.get(i))).getPeopleName());
  13.   result[2] = new Long(((people)(objlist.get(i))).getPeopleAge());
  14.   structs[i] = new STRUCT(structdesc, con, result);
  15. }
  16. ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,
  17.  con);
  18. list = new ARRAY(desc, con, structs);
  19. else {
  20.  ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,
  21. con);
  22.  STRUCT[] structs = new STRUCT[0];
  23.  list = new ARRAY(desc, con, structs);
  24. }
  25. return list;
  26. // function

3./*把转换后的数组加到存储过程中*/

  1. public static int updateADInfo(ArrayList peoleList, int ID){
  2. Connection con = null;
  3. CallableStatement stmt = null;
  4. int backVal; 
  5.  try {
  6.   con = pool.getConnection();
  7.   if (con != null) {
  8.   stmt = con.prepareCall("{call updatePeople(?,?,?)}");
  9.   ARRAY adArray = getOracleArray(con, "people_Oracle_LIST", 
  10.   peoleList);
  11.   ((OracleCallableStatement) stmt).setARRAY(1, adArray);
  12.   stmt.setInt(2, ID); 
  13.   stmt.registerOutParameter(3, java.sql.Types.INTEGER);
  14.   stmt.execute(); 
  15. else { 
  16.  backVal = 1;
  17. }
  18. catch (Exception e) { 
  19.   e.printStackTrace(); 
  20. finally {
  21. pool.freeDBResource(con, stmt, null);
  22. }
  23.  return backVal;
  24. }

4.存储过程中调用

  1. CREATE OR REPLACE PROCEDURE NAD_SP_CreateWebCostToAd(
  2. p_peopleArray IN people_Oracle_LIST,
  3. p_ID IN number, 
  4. p_out OUT VARCHAR2
  5. )
  6. AS
  7. VpeopleID number(8) :=0;
  8. VpeopleName varchar(50):=0;
  9. Vage number(3):=0;
  10. begin
  11. for i 1...p_peopleArray.count loop
  12.   peopleObj :=p_peopleArray(i);
  13.   VpeopleID := peopleObj.peopleOracleID;
  14.   VpeopleName := peopleObj.nameOracle;
  15.   Vage :=peopleObj.ageOracle;
  16. .................
  17.  end loop;
  18.  commit;
  19. EXCEPTION 
  20. WHEN OTHERS THEN
  21. p_out:='-1' || SQLERRM;
  22. ROLLBACK; 
  23. END;
  24. /
  25. SHOW ERRORS 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值