亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下是關于java調用oracle函數的問題,請問該怎么改?

如下是關于java調用oracle函數的問題,請問該怎么改?

胡說叔叔 2022-04-14 18:11:10
我在oracle中定義一個自己的myArray類型,is varray(1000) of varchar2(100)然后定義了一個函數,其中要求傳入的參數就是我自己定義的myArray,現在我想把java中的String[] 直接作為{call 包名.函數名(String數組)} 這樣的話將String數組傳給oracle函數。請問這樣能行嗎? 如果有demo的話不甚感激oracle接收到數組,還要對里面的數據進行讀取出來進行操作,并不是簡單的把數組插入到表中
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

例:arrayList中存在一些people對象1.首先要在數據庫中建立相應的java對象和數組,如:/*和java對象對應的數據庫對象*/CREATETYPEpeopleOracleObjectASOBJECT( peopleOracleIDNUMBER(8), nameOraclevarchar(50), ageOracleNumber(3))/數據庫中的arrayCREATETYPEpeople_Oracle_LISTASVARRAY(500)OFpeopleOracle;/2.將java中的arrayList轉化privatestaticARRAYgetOracleArray(Connectioncon,StringOraclelist,ArrayListobjlist)throwsException{ ARRAYlist=null; if(objlist!=null&&objlist.size()>0){ StructDescriptorstructdesc=newStructDescriptor( "peopleOracleObject",con); STRUCT[]structs=newSTRUCT[objlist.size()]; Object[]result=newObject[0]; for(inti=0;i<objlist.size();i){ result=newObject[2]; result[0]=newLong(((people)(objlist.get(i))).getPeopleID()); result[1]=newLong(((people)(objlist.get(i))).getPeopleName()); result[2]=newLong(((people)(objlist.get(i))).getPeopleAge()); structs=newSTRUCT(structdesc,con,result);}ArrayDescriptordesc=ArrayDescriptor.createDescriptor(Oraclelist, con);list=newARRAY(desc,con,structs);}else{ ArrayDescriptordesc=ArrayDescriptor.createDescriptor(Oraclelist,con); STRUCT[]structs=newSTRUCT[0]; list=newARRAY(desc,con,structs);}returnlist;}//function3./*把轉換后的數組加到存儲過程中*/publicstaticintupdateADInfo(ArrayListpeoleList,intID){Connectioncon=null;CallableStatementstmt=null;intbackVal; try{ con=pool.getConnection(); if(con!=null){ stmt=con.prepareCall("{callupdatePeople(?,?,?)}"); ARRAYadArray=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(Exceptione){ e.printStackTrace();}finally{pool.freeDBResource(con,stmt,null);} returnbackVal;}4.存儲過程中調用CREATEORREPLACEPROCEDURENAD_SP_CreateWebCostToAd(p_peopleArrayINpeople_Oracle_LIST,p_IDINnumber,p_outOUTVARCHAR2)ASVpeopleIDnumber(8):=0;VpeopleNamevarchar(50):=0;Vagenumber(3):=0;beginfori1...p_peopleArray.countloop peopleObj:=p_peopleArray(i); VpeopleID:=peopleObj.peopleOracleID; VpeopleName:=peopleObj.nameOracle; Vage:=peopleObj.ageOracle;................. endloop; commit;EXCEPTIONWHENOTHERSTHENp_out:=’-1’||SQLERRM;ROLLBACK;END;/SHOWERRORS

查看完整回答
反對 回復 2022-04-19
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

對于java中的對象或者數組要傳遞到oracle存儲過程或者函數中要借助于oracle提供的相應轉換工具類

查看完整回答
反對 回復 2022-04-19
  • 2 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號