




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
外文原文WORKINGWITHORACLEOBJECTTYPESTHISCHAPTERDESCRIBESJDBCSUPPORTFORUSERDEFINEDOBJECTTYPESITDISCUSSESFUNCTIONALITYOFTHEGENERIC,WEAKLYTYPEDORACLESQLSTRUCTCLASS,ASWELLASHOWTOMAPTOCUSTOMJAVACLASSESTHATIMPLEMENTEITHERTHEJDBCSTANDARDSQLDATAINTERFACEORTHEORACLEORADATAINTERFACETHISCHAPTERALSODESCRIBESHOWJDBCDRIVERSACCESSSQLJOBJECTTYPESINSQLREPRESENTATIONTHEFOLLOWINGTOPICSARECOVERED_MAPPINGORACLEOBJECTS_USINGTHEDEFAULTSTRUCTCLASSFORORACLEOBJECTS_CREATINGANDUSINGCUSTOMOBJECTCLASSESFORORACLEOBJECTS_OBJECTTYPEINHERITANCE_USINGJPUBLISHERTOCREATECUSTOMOBJECTCLASSES_DESCRIBINGANOBJECTTYPE_SQLJOBJECTTYPESNOTEFORGENERALINFORMATIONABOUTORACLEOBJECTFEATURESANDFUNCTIONALITY,SEETHEORACLE9IAPPLICATIONDEVELOPERSGUIDEOBJECTRELATIONALFEATURESMAPPINGORACLEOBJECTSORACLEOBJECTTYPESPROVIDESUPPORTFORCOMPOSITEDATASTRUCTURESINTHEDATABASEFOREXAMPLE,YOUCANDEFINEATYPEPERSONTHATHASATTRIBUTESSUCHASNAMETYPECHAR,PHONENUMBERTYPECHAR,ANDEMPLOYEENUMBERTYPENUMBERORACLEPROVIDESTIGHTINTEGRATIONBETWEENITSORACLEOBJECTFEATURESANDITSJDBCFUNCTIONALITYYOUCANUSEASTANDARD,GENERICJDBCTYPETOMAPTOORACLEOBJECTS,ORYOUCANCUSTOMIZETHEMAPPINGBYCREATINGCUSTOMJAVATYPEDEFINITIONCLASSESINTHISBOOK,JAVACLASSESTHATYOUCREATETOMAPTOORACLEOBJECTSWILLBEREFERREDTOASCUSTOMJAVACLASSESOR,MORESPECIFICALLY,CUSTOMOBJECTCLASSESTHISISASOPPOSEDTOCUSTOMREFERENCESCLASSESTOMAPTOOBJECTREFERENCES,ANDCUSTOMCOLLECTIONCLASSESTOMAPTOORACLECOLLECTIONSCUSTOMOBJECTCLASSESCANIMPLEMENTEITHERASTANDARDJDBCINTERFACEORANORACLEEXTENSIONINTERFACETOREADANDWRITEDATAJDBCMATERIALIZESORACLEOBJECTSASINSTANCESOFPARTICULARJAVACLASSESTWOMAINSTEPSINUSINGJDBCTOACCESSORACLEOBJECTSARE1CREATINGTHEJAVACLASSESFORTHEORACLEOBJECTS,AND2POPULATINGTHESECLASSESYOUHAVETWOOPTIONSLETJDBCMATERIALIZETHEOBJECTASASTRUCTTHISISDESCRIBEDIN“USINGTHEDEFAULTSTRUCTCLASSFORORACLEOBJECTS“ONPAGE93OREXPLICITLYSPECIFYTHEMAPPINGSBETWEENORACLEOBJECTSANDJAVACLASSESTHISINCLUDESCUSTOMIZINGYOURJAVACLASSESFOROBJECTDATATHEDRIVERTHENMUSTBEABLETOPOPULATEINSTANCESOFTHECUSTOMOBJECTCLASSESTHATYOUSPECIFYTHISIMPOSESASETOFCONSTRAINTSONTHEJAVACLASSESTOSATISFYTHESECONSTRAINTS,YOUCANDEFINEYOURCLASSESTOIMPLEMENTEITHERTHEJDBCSTANDARDJAVASQLSQLDATAINTERFACEORTHEORACLEEXTENSIONORACLESQLORADATAINTERFACETHISISDESCRIBEDIN“CREATINGANDUSINGCUSTOMOBJECTCLASSESFORORACLEOBJECTS“ONPAGE910YOUCANUSETHEORACLEJPUBLISHERUTILITYTOGENERATECUSTOMJAVACLASSESUSINGTHEDEFAULTSTRUCTCLASSFORORACLEOBJECTSIFYOUCHOOSENOTTOSUPPLYACUSTOMJAVACLASSFORYOURSQLJAVAMAPPINGFORANORACLEOBJECT,THENORACLEJDBCWILLMATERIALIZETHEOBJECTASANINSTANCEOFTHEORACLESQLSTRUCTCLASSYOUWOULDTYPICALLYWANTTOUSESTRUCTOBJECTS,INSTEADOFCUSTOMJAVAOBJECTS,INSITUATIONSWHEREYOUAREMANIPULATINGSQLDATAFOREXAMPLE,YOURJAVAAPPLICATIONMIGHTBEATOOLTOMANIPULATEARBITRARYOBJECTDATAWITHINTHEDATABASE,ASOPPOSEDTOBEINGANENDUSERAPPLICATIONYOUCANSELECTDATAFROMTHEDATABASEINTOSTRUCTOBJECTSANDCREATESTRUCTOBJECTSFORINSERTINGDATAINTOTHEDATABASESTRUCTOBJECTSCOMPLETELYPRESERVEDATA,BECAUSETHEYMAINTAINTHEDATAINSQLFORMATUSINGSTRUCTOBJECTSISMOREEFFICIENTANDMOREPRECISEINTHESESITUATIONSWHEREYOUDONTNEEDTHEINFORMATIONINACONVENIENTFORMSTRUCTCLASSFUNCTIONALITYTHISSECTIONDISCUSSESSTANDARDVERSUSORACLESPECIFICFEATURESOFTHEORACLESQLSTRUCTCLASS,INTRODUCESSTRUCTDESCRIPTORS,ANDLISTSMETHODSOFTHESTRUCTCLASSTOGIVEANOVERVIEWOFITSFUNCTIONALITYSTANDARDJAVASQLSTRUCTMETHODSIFYOURCODEMUSTCOMPLYWITHSTANDARDJDBC20,THENUSEAJAVASQLSTRUCTINSTANCEORACLEJDBC2STRUCTUNDERJDK11X,ANDUSETHEFOLLOWINGSTANDARDMETHODSGETATTRIBUTESMAPRETRIEVESTHEVALUESOFTHEATTRIBUTES,USINGENTRIESINTHESPECIFIEDTYPEMAPTODETERMINETHEJAVACLASSESTOUSEINMATERIALIZINGANYATTRIBUTETHATISASTRUCTUREDOBJECTTYPETHEJAVATYPESFOROTHERATTRIBUTEVALUESWOULDBETHESAMEASFORAGETOBJECTCALLONDATAOFTHEUNDERLYINGSQLTYPETHEDEFAULTJDBCTYPESGETATTRIBUTESTHISISTHESAMEASTHEPRECEDINGGETATTRIBUTESMAPMETHOD,EXCEPTITUSESTHEDEFAULTTYPEMAPFORTHECONNECTIONGETSQLTYPENAMERETURNSAJAVASTRINGTHATREPRESENTSTHEFULLYQUALIFIEDNAMESCHEMASQL_TYPE_NAMEOFTHEORACLEOBJECTTYPETHATTHISSTRUCTREPRESENTSSUCHASSCOTTEMPLOYEEORACLEORACLESQLSTRUCTCLASSMETHODSIFYOUWANTTOTAKEADVANTAGEOFTHEEXTENDEDFUNCTIONALITYOFFEREDBYORACLEDEFINEDMETHODS,THENUSEANORACLESQLSTRUCTINSTANCETHEORACLESQLSTRUCTCLASSIMPLEMENTSTHEJAVASQLSTRUCTINTERFACEORACLEJDBC2STRUCTINTERFACEUNDERJDK11XANDPROVIDESEXTENDEDFUNCTIONALITYBEYONDTHEJDBC20STANDARDTHESTRUCTCLASSINCLUDESTHEFOLLOWINGMETHODSINADDITIONTOSTANDARDSTRUCTFUNCTIONALITYGETORACLEATTRIBUTESRETRIEVESTHEVALUESOFTHEVALUESARRAYASORACLESQLOBJECTSGETDESCRIPTORRETURNSTHESTRUCTDESCRIPTOROBJECTFORTHESQLTYPETHATCORRESPONDSTOTHISSTRUCTOBJECTGETJAVASQLCONNECTIONRETURNSTHECURRENTCONNECTIONINSTANCEJAVASQLCONNECTIONTOJDBCCONSULTSTHEDEFAULTTYPEMAPOFTHECONNECTION,TODETERMINEWHATCLASSTOMAPTO,ANDTHENUSESTOCLASSTOJDBCMAPCONSULTSTHESPECIFIEDTYPEMAPTODETERMINEWHATCLASSTOMAPTO,ANDTHENUSESTOCLASSSTRUCTDESCRIPTORSCREATINGANDUSINGASTRUCTOBJECTREQUIRESADESCRIPTORANINSTANCEOFTHEORACLESQLSTRUCTDESCRIPTORCLASSTOEXISTFORTHESQLTYPESUCHASEMPLOYEETHATWILLCORRESPONDTOTHESTRUCTOBJECTYOUNEEDONLYONESTRUCTDESCRIPTOROBJECTFORANYNUMBEROFSTRUCTOBJECTSTHATCORRESPONDTOTHESAMESQLTYPESTRUCTDESCRIPTORSAREFURTHERDISCUSSEDIN“CREATINGSTRUCTOBJECTSANDDESCRIPTORS“ONPAGE94CREATINGSTRUCTOBJECTSANDDESCRIPTORSTHISSECTIONDESCRIBESHOWTOCREATESTRUCTOBJECTSANDDESCRIPTORSANDLISTSUSEFULMETHODSOFTHESTRUCTDESCRIPTORCLASSSTEPSINCREATINGSTRUCTDESCRIPTORANDSTRUCTOBJECTSTHISSECTIONDESCRIBESHOWTOCONSTRUCTANORACLESQLSTRUCTOBJECTFORAGIVENORACLEOBJECTTYPETOCREATEASTRUCTOBJECT,YOUMUSTCREATEASTRUCTDESCRIPTOROBJECTIFONEDOESNOTALREADYEXISTFORTHEGIVENORACLEOBJECTTYPEUSETHESTRUCTDESCRIPTORTOCONSTRUCTTHESTRUCTOBJECTASTRUCTDESCRIPTORISANINSTANCEOFTHEORACLESQLSTRUCTDESCRIPTORCLASSANDDESCRIBESATYPEOFORACLEOBJECTSQLSTRUCTUREDOBJECTONLYONESTRUCTDESCRIPTORISNECESSARYFOREACHORACLEOBJECTTYPETHEDRIVERCACHESSTRUCTDESCRIPTOROBJECTSTOAVOIDRECREATINGTHEMIFTHETYPEHASALREADYBEENENCOUNTEREDBEFOREYOUCANCONSTRUCTASTRUCTOBJECT,ASTRUCTDESCRIPTORMUSTFIRSTEXISTFORTHEGIVENORACLEOBJECTTYPEIFASTRUCTDESCRIPTOROBJECTDOESNOTEXIST,YOUCANCREATEONEBYCALLINGTHESTATICSTRUCTDESCRIPTORCREATEDESCRIPTORMETHODTHISMETHODREQUIRESYOUTOPASSINTHESQLTYPENAMEOFTHEORACLEOBJECTTYPEANDACONNECTIONOBJECTSTRUCTDESCRIPTORSTRUCTDESCSTRUCTDESCRIPTORCREATEDESCRIPTORSQL_TYPE_NAME,CONNECTIONWHERESQL_TYPE_NAMEISAJAVASTRINGCONTAININGTHENAMEOFTHEORACLEOBJECTTYPESUCHASEMPLOYEEANDCONNECTIONISYOURCONNECTIONOBJECTONCEYOUHAVEYOURSTRUCTDESCRIPTOROBJECTFORTHEORACLEOBJECTTYPE,YOUCANCONSTRUCTTHESTRUCTOBJECTTODOTHIS,PASSINTHESTRUCTDESCRIPTOR,YOURCONNECTIONOBJECT,ANDANARRAYOFJAVAOBJECTSCONTAININGTHEATTRIBUTESYOUWANTTHESTRUCTTOCONTAINSTRUCTSTRUCTNEWSTRUCTSTRUCTDESC,CONNECTION,ATTRIBUTESWHERESTRUCTDESCISTHESTRUCTDESCRIPTORCREATEDPREVIOUSLY,CONNECTIONISYOURCONNECTIONOBJECT,ANDATTRIBUTESISANARRAYOFTYPEJAVALANGOBJECTUSINGSTRUCTDESCRIPTORMETHODSASTRUCTDESCRIPTORCANBETHOUGHTOFASA“TYPEOBJECT“THISMEANSTHATITCONTAINSINFORMATIONABOUTTHEOBJECTTYPE,INCLUDINGTHETYPECODE,THETYPENAME,ANDHOWTOCONVERTTOANDFROMTHEGIVENTYPEREMEMBER,THERESHOULDBEONLYONESTRUCTDESCRIPTOROBJECTFORANYONEORACLEOBJECTTYPEYOUCANTHENUSETHATDESCRIPTORTOCREATEASMANYSTRUCTOBJECTSASYOUNEEDFORTHATTYPETHESTRUCTDESCRIPTORCLASSINCLUDESTHEFOLLOWINGMETHODSGETNAMERETURNSTHEFULLYQUALIFIEDSQLTYPENAMEOFTHEORACLEOBJECTTHATIS,INSCHEMASQL_TYPE_NAMEFORMAT,SUCHASCORPORATEEMPLOYEEGETLENGTHRETURNSTHENUMBEROFFIELDSINTHEOBJECTTYPEGETMETADATARETURNSTHEMETADATAREGARDINGTHISTYPELIKETHEGETMETADATAMETHODOFARESULTSETOBJECTTHERETURNEDRESULTSETMETADATAOBJECTCONTAINSTHEATTRIBUTENAME,ATTRIBUTETYPECODE,ANDATTRIBUTETYPEPRECISIONINFORMATIONTHE“COLUMN“INDEXINTHERESULTSETMETADATAOBJECTMAPSTOTHEPOSITIONOFTHEATTRIBUTEINTHESTRUCT,WITHTHEFIRSTATTRIBUTEBEINGATINDEX1THEGETMETADATAMETHODISFURTHERDISCUSSEDIN“FUNCTIONALITYFORGETTINGOBJECTMETADATA“ONPAGE949SERIALIZABLESTRUCTDESCRIPTORSAS“STEPSINCREATINGSTRUCTDESCRIPTORANDSTRUCTOBJECTS“ONPAGE94EXPLAINS,WHENYOUCREATEASTRUCTOBJECT,YOUFIRSTMUSTCREATEASTRUCTDESCRIPTOROBJECTDOTHISBYCALLINGTHESTRUCTDESCRIPTORCREATEDESCRIPTORMETHODTHEORACLESQLSTRUCTDESCRIPTORCLASSISSERIALIZABLE,MEANINGTHATYOUCANWRITETHECOMPLETESTATEOFASTRUCTDESCRIPTOROBJECTTOANOUTPUTSTREAMFORLATERUSERECREATETHESTRUCTDESCRIPTOROBJECTBYREADINGITSSERIALIZEDSTATEFROMANINPUTSTREAMTHISISREFERREDTOASDESERIALIZINGWITHTHESTRUCTDESCRIPTOROBJECTSERIALIZED,YOUDONOTNEEDTOCALLTHESTRUCTDESCRIPTORCREATEDESCRIPTORMETHODYOUSIMPLYDESERIALIZETHESTRUCTDESCRIPTOROBJECTITISADVISABLETOSERIALIZEASTRUCTDESCRIPTOROBJECTWHENTHEOBJECTTYPEISCOMPLEXBUTNOTCHANGEDOFTENIFYOUCREATEASTRUCTDESCRIPTOROBJECTTHROUGHDESERIALIZATION,YOUMUSTSUPPLYTHEAPPROPRIATEDATABASECONNECTIONINSTANCEFORTHESTRUCTDESCRIPTOROBJECT,USINGTHESETCONNECTIONMETHODTHEFOLLOWINGCODEPROVIDESTHECONNECTIONINSTANCEFORASTRUCTDESCRIPTOROBJECTPUBLICVOIDSETCONNECTIONCONNECTIONCONNTHROWSSQLEXCEPTIONRETRIEVINGSTRUCTOBJECTSANDATTRIBUTESTHISSECTIONDISCUSSESHOWTORETRIEVEANDMANIPULATEORACLEOBJECTSANDTHEIRATTRIBUTES,USINGEITHERORACLESPECIFICFEATURESORJDBC20STANDARDFEATURESRETRIEVINGANORACLEOBJECTASANORACLESQLSTRUCTOBJECTYOUCANRETRIEVEANORACLEOBJECTDIRECTLYINTOANORACLESQLSTRUCTINSTANCEINTHEFOLLOWINGEXAMPLE,GETOBJECTISUSEDTOGETANUMBEROBJECTFROMCOLUMN1COL1OFTHETABLESTRUCT_TABLEBECAUSEGETOBJECTRETURNSANOBJECTTYPE,THERETURNISCASTTOANORACLESQLSTRUCTTHISEXAMPLEASSUMESTHATTHESTATEMENTOBJECTSTMTHASALREADYBEENCREATEDSTRINGCMDCMD“CREATETYPETYPE_STRUCTASOBJECTFIELD1NUMBER,FIELD2DATE“STMTEXECUTECMDCMD“CREATETABLESTRUCT_TABLECOL1TYPE_STRUCT“STMTEXECUTECMDCMD“INSERTINTOSTRUCT_TABLEVALUESTYPE_STRUCT10,01APR01“STMTEXECUTECMDCMD“INSERTINTOSTRUCT_TABLEVALUESTYPE_STRUCT20,02MAY02“STMTEXECUTECMDRESULTSETRSSTMTEXECUTEQUERY“SELECTFROMSTRUCT_TABLE“ORACLESQLSTRUCTORACLESTRUCTORACLESQLSTRUCTRSGETOBJECT1ANOTHERWAYTORETURNTHEOBJECTASASTRUCTOBJECTISTOCASTTHERESULTSETTOANORACLERESULTSETOBJECTANDUSETHEORACLEEXTENSIONGETSTRUCTMETHODORACLESQLSTRUCTORACLESTRUCTORACLERESULTSETRSGETSTRUCT1RETRIEVINGANORACLEOBJECTASAJAVASQLSTRUCTOBJECTALTERNATIVELY,REFERRINGBACKTOTHEPREVIOUSEXAMPLE,YOUCANUSESTANDARDJDBCFUNCTIONALITYSUCHASGETOBJECTTORETRIEVEANORACLEOBJECTFROMTHEDATABASEASANINSTANCEOFJAVASQLSTRUCTORACLEJDBC2STRUCTUNDERJDK11XBECAUSEGETOBJECTRETURNSAJAVALANGOBJECT,YOUMUSTCASTTHEOUTPUTOFTHEMETHODTOASTRUCTFOREXAMPLERESULTSETRSSTMTEXECUTEQUERY“SELECTFROMSTRUCT_TABLE“JAVASQLSTRUCTJDBCSTRUCTJAVASQLSTRUCTRSGETOBJECT1RETRIEVINGATTRIBUTESASORACLESQLTYPESIFYOUWANTTORETRIEVEORACLEOBJECTATTRIBUTESFROMASTRUCTORSTRUCTINSTANCEASORACLESQLTYPES,USETHEGETORACLEATTRIBUTESMETHODOFTHEORACLESQLSTRUCTCLASSFORASTRUCTINSTANCE,YOUWILLHAVETOCASTTOASTRUCTINSTANCEREFERRINGBACKTOTHEPREVIOUSEXAMPLESORACLESQLDATUMATTRSORACLESTRUCTGETORACLEATTRIBUTESORORACLESQLDATUMATTRSORACLESQLSTRUCTJDBCSTRUCTGETORACLEATTRIBUTESRETRIEVINGATTRIBUTESASSTANDARDJAVATYPESIFYOUWANTTORETRIEVEORACLEOBJECTATTRIBUTESASSTANDARDJAVATYPESFROMASTRUCTORSTRUCTINSTANCE,USETHESTANDARDGETATTRIBUTESMETHODOBJECTATTRSJDBCSTRUCTGETATTRIBUTESBINDINGSTRUCTOBJECTSINTOSTATEMENTSTOBINDANORACLESQLSTRUCTOBJECTTOAPREPAREDSTATEMENTORCALLABLESTATEMENT,YOUCANEITHERUSETHESTANDARDSETOBJECTMETHODSPECIFYINGTHETYPECODE,ORCASTTHESTATEMENTOBJECTTOANORACLESTATEMENTOBJECTANDUSETHEORACLEEXTENSIONSETORACLEOBJECTMETHODFOREXAMPLEPREPAREDSTATEMENTPSCONNPREPARESTATEMENT“TEXT_OF_PREPARED_STATEMENT“STRUCTMYSTRUCTNEWSTRUCTPSSETOBJECT1,MYSTRUCT,TYPESSTRUCT/ORACLETYPESSTRUCTUNDERJDK11XORPREPAREDSTATEMENTPSCONNPREPARESTATEMENT“TEXT_OF_PREPARED_STATEMENT“STRUCTMYSTRUCTNEWSTRUCTORACLEPREPAREDSTATEMENTPSSETORACLEOBJECT1,MYSTRUCTSTRUCTAUTOMATICATTRIBUTEBUFFERINGTHEORACLEJDBCDRIVERFURNISHESPUBLICMETHODSTOENABLEANDDISABLEBUFFERINGOFSTRUCTATTRIBUTESSEE“ARRAYAUTOMATICELEMENTBUFFERING“ONPAGE119FORADISCUSSIONOFHOWTOBUFFERARRAYELEMENTSTHEFOLLOWINGMETHODSAREINCLUDEDWITHTHEORACLESQLSTRUCTCLASSPUBLICVOIDSETAUTOBUFFERINGBOOLEANENABLEPUBLICBOOLEANGETAUTOBUFFERINGTHESETAUTOBUFFERINGBOOLEANMETHODENABLESORDISABLESAUTOBUFFERINGTHEGETAUTOBUFFERINGMETHODRETURNSTHECURRENTAUTOBUFFERINGMODEBYDEFAULT,AUTOBUFFERINGISDISABLEDITISADVISABLETOENABLEAUTOBUFFERINGINAJDBCAPPLICATIONWHENTHESTRUCTATTRIBUTESWILLBEACCESSEDMORETHANONCEBYTHEGETATTRIBUTESANDGETARRAYMETHODSPRESUMINGTHEARRAYDATAISABLETOFITINTOTHEJVMMEMORYWITHOUTOVERFLOWWHENYOUENABLEAUTOBUFFERING,THEORACLESQLSTRUCTOBJECTKEEPSALOCALCOPYOFALLTHECONVERTEDATTRIBUTESTHISDATAISRETAINEDSOTHATASECONDACCESSOFTHISINFORMATIONDOESNOTREQUIREGOINGTHROUGHTHEDATAFORMATCONVERSIONPROCESSCREATINGANDUSINGCUSTOMOBJECTCLASSESFORORACLEOBJECTSIFYOUWANTTOCREATECUSTOMOBJECTCLASSESFORYOURORACLEOBJECTS,THENYOUMUSTDEFINEENTRIESINTHETYPEMAPTHATSPECIFYTHECUSTOMOBJECTCLASSESTHATTHEDRIVERSWILLINSTANTIATEFORTHECORRESPONDINGORACLEOBJECTSYOUMUSTALSOPROVIDEAWAYTOCREATEANDPOPULATEINSTANCESOFTHECUSTOMOBJECTCLASSFROMTHEORACLEOBJECTANDITSATTRIBUTEDATATHEDRIVERMUSTBEABLETOREADFROMACUSTOMOBJECTCLASSANDWRITETOITINADDITION,THECUSTOMOBJECTCLASSCANPROVIDEGETXXXANDSETXXXMETHODSCORRESPONDINGTOTHEORACLEOBJECTSATTRIBUTES,ALTHOUGHTHISISNOTNECESSARYTOCREATEANDPOPULATETHECUSTOMCLASSESANDPROVIDETHESEREAD/WRITECAPABILITIES,YOUCANCHOOSEBETWEENTHESETWOINTERFACESTHEJDBCSTANDARDSQLDATAINTERFACETHEORADATAANDORADATAFACTORYINTERFACESPROVIDEDBYORACLETHECUSTOMOBJECTCLASSYOUCREATEMUSTIMPLEMENTONEOFTHESEINTERFACESTHEORADATAINTERFACECANALSOBEUSEDTOIMPLEMENTTHECUSTOMREFERENCECLASSCORRESPONDINGTOTHECUSTOMOBJECTCLASSIFYOUAREUSINGTHESQLDATAINTERFACE,HOWEVER,YOUCANONLYUSEWEAKREFERENCETYPESINJAVAJAVASQLREFORORACLESQLREFTHESQLDATAINTERFACEISFORMAPPINGSQLOBJECTSONLYASANEXAMPLE,ASSUMEYOUHAVEANORACLEOBJECTTYPE,EMPLOYEE,INTHEDATABASETHATCONSISTSOFTWOATTRIBUTESNAMEWHICHISTYPECHARANDEMPNUMEMPLOYEENUMBER,WHICHISTYPENUMBERYOUUSETHETYPEMAPTOSPECIFYTHATTHEEMPLOYEEOBJECTSHOULDMAPTOACUSTOMOBJECTCLASSTHATYOUCALLJEMPLOYEEYOUCANIMPLEMENTEITHERTHESQLDATAORORADATAINTERFACEINTHEJEMPLOYEECLASSYOUCANCREATECUSTOMOBJECTCLASSESYOURSELF,BUTTHEMOSTCONVENIENTWAYTOCREATETHEMISTOEMPLOYTHEORACLEJPUBLISHERUTILITYTOCREATETHEMFORYOUJPUBLISHERSUPPORTSTHESTANDARDSQLDATAINTERFACEASWELLASTHEORACLESPECIFICORADATAINTERFACE,ANDISABLETOGENERATECLASSESTHATIMPLEMENTEITHERONESEE“USINGJPUBLISHERTOCREATECUSTOMOBJECTCLASSES“ONPAGE945FORMOREINFORMATIONTHEFOLLOWINGSECTIONCOMPARESORADATAANDSQLDATAFUNCTIONALITYRELATIVEADVANTAGESOFORADATAVERSUSSQLDATAINDECIDINGWHICHOFTHESETWOINTERFACEIMPLEMENTATIONSTOUSE,CONSIDERTHEFOLLOWINGADVANTAGESOFORADATAITDOESNOTREQUIREANENTRYINTHETYPEMAPFORTHEORACLEOBJECTITHASAWARENESSOFORACLEEXTENSIONSYOUCANCONSTRUCTAORADATAFROMANORACLESQLSTRUCTTHISISMOREEFFICIENTBECAUSEITAVOIDSUNNECESSARYCONVERSIONSTONATIVEJAVATYPESYOUCANOBTAINTHECORRESPONDINGDATUMOBJECTWHICHISINORACLESQLFORMATFROMTHEORADATAOBJECT,USINGTHETODATUMMETHODITPROVIDESBETTERPERFORMANCEORADATAWORKSDIRECTLYWITHDATUMTYPES,WHICHISTHEINTERNALFORMATUSEDBYTHEDRIVERTOHOLDORACLEOBJECTSADVANTAGESOFSQLDATAITISAJDBCSTANDARD,MAKINGYOURCODEMOREPORTABLETHESQLDATAINTERFACEISFORMAPPINGSQLOBJECTSONLYTHEORADATAINTERFACEISMOREFLEXIBLE,ENABLINGYOUTOMAPSQLOBJECTSASWELLASANYOTHERSQLTYPEFORWHICHYOUWANTTOCUSTOMIZEPROCESSINGYOUCANCREATEAORADATAOBJECTFROMANYDATATYPEFOUNDINANORACLEDATABASETHISCOULDBEUSEFUL,FOREXAMPLE,FORSERIALIZINGRAWDATAINJAVAUNDERSTANDINGTYPEMAPSFORSQLDATAIMPLEMENTATIONSIFYOUUSETHESQLDATAINTERFACEINACUSTOMOBJECTCLASS,THENYOUMUSTCREATETYPEMAPENTRIESTHATSPECIFYTHECUSTOMOBJECTCLASSTOUSEINMAPPINGTHEORACLEOBJECTTYPESQLOBJECTTYPETOJAVAYOUCANEITHERUSETHEDEFAULTTYPEMAPOFTHECONNECTIONOBJECT,ORATYPEMAPTHATYOUSPECIFYWHENYOURETRIEVETHEDATAFROMTHERESULTSETTHERESULTSETINTERFACEGETOBJECTMETHODHASASIGNATURETHATLETSYOUSPECIFYATYPEMAPRSGETOBJECTINTCOLUMNINDEXORRSGETOBJECTINTCOLUMNINDEX,MAPMAPFORADESCRIPTIONOFHOWTOCREATETHESECUSTOMOBJECTCLASSESWITHSQLDATA,SEE“CREATINGANDUSINGCUSTOMOBJECTCLASSESFORORACLEOBJECTS“ONPAGE910WHENUSINGASQLDATAIMPLEMENTATION,IFYOUDONOTINCLUDEATYPEMAPENTRY,THENTHEOBJECTWILLMAPTOTHEORACLESQLSTRUCTCLASSBYDEFAULTORADATAIMPLEMENTATIONS,BYCONTRAST,HAVETHEIROWNMAPPINGFUNCTIONALITYSOTHATATYPEMAPENTRYISNOTREQUIREDWHENUSINGAORADATAIMPLEMENTATION,USETHEORACLEGETORADATAMETHODINSTEADOFTHESTANDARDGETOBJECTMETHODTHETYPEMAPRELATESAJAVACLASSTOTHESQLTYPENAMEOFANORACLEOBJECTTHISONETOONEMAPPINGISSTOREDINAHASHTABLEASAKEYWORDVALUEPAIRWHENYOUREADDATAFROMANORACLEOBJECT,THEJDBCDRIVERCONSIDERSTHETYPEMAPTODETERMINEWHICHJAVACLASSTOUSETOMATERIALIZETHEDATAFROMTHEORACLEOBJECTTYPESQLOBJECTTYPEWHENYOUWRITEDATATOANORACLEOBJECT,THEJDBCDRIVERGETSTHESQLTYPENAMEFROMTHEJAVACLASSBYCALLINGTHEGETSQLTYPENAMEMETHODOFTHESQLDATAINTERFACETHEACTUALCONVERSIONBETWEENSQLANDJAVAISPERFORMEDBYTHEDRIVERTHEATTRIBUTESOFTHEJAVACLASSTHATCORRESPONDSTOANORACLEOBJECTCANUSEEITHERJAVANATIVETYPESORORACLENATIVETYPESINSTANCESOFTHEORACLESQLCLASSESTOSTOREATTRIBUTESCREATINGATYPEMAPOBJECTANDDEFININGMAPPINGSFORASQLDATAIMPLEMENTATIONWHENUSINGASQLDATAIMPLEMENTATION,THEJDBCAPPLICATIONSPROGRAMMERISRESPONSIBLEFORPROVIDINGATYPEMAP,WHICHMUSTBEANINSTANCEOFACLASSASFOLLOWSUNDERJDK12X,ANINSTANCEOFACLASSTHATIMPLEMENTSTHESTANDARDJAVAUTILMAPINTERFACEORUNDERJDK11X,ANINSTANCEOFACLASSTHATEXTENDSTHESTANDARDJAVAUTILDICTIONARYCLASSORANINSTANCEOFTHEDICTIONARYCLASSITSELFYOUHAVETHEOPTIONOFCREATINGYOUROWNCLASSTOACCOMPLISHTHIS,BUTUNDEREITHERJDK12XORJDK11X,THESTANDARDCLASSJAVAUTILHASHTABLEMEETSTHEREQUIREMENT中文翻譯使用ORACLE對象類型這一章說明了JDBC支持用戶定義的對象類型,它討論的是ORACLESQLSTRUCT類的功能,以及如何將它映射到一個實現(xiàn)JDBC標(biāo)準(zhǔn)SQLDATA接口或ORACLEORADATA接口的自定義類。這章還描述了在SQL表示中JDBC驅(qū)動怎樣訪問SQLJ對象類型下面的主題包括映射ORACLE對象對于ORACLE對象使用默認的STRUCT類創(chuàng)建和使用自定義對象類為ORACLE對象對象類型的繼承用JPUBLISHER來創(chuàng)建自定義對象類描述一個對象類型SQLJ對象類型NOTE有關(guān)ORACLE對象功能的一般信息和功能,請參閱ORACLE9I應(yīng)用程序開發(fā)人員指南關(guān)系對象的功能。映射ORACLE對象ORACLE對象類型提供對數(shù)據(jù)庫中的復(fù)合數(shù)據(jù)結(jié)構(gòu)的支持。例如,您可以定義一個類型人員具有屬性,如名稱(類型CHAR,電話號碼(類型CHAR)和雇員編號(類型NUMBER)。同時ORACLE還在ORACLE對象功能和它的JDBC之間間提供緊密地聯(lián)系,可以用一個標(biāo)準(zhǔn)的、泛型JDBC類型來映射到ORACLE對象,或者你可以自定義映射通過創(chuàng)建自定義JAVA類型定義類。在本書中,你創(chuàng)建映射到ORACLE對象的JAVA類會被當(dāng)作自定義JAVA類來訪問或者進一步說是自定義對象類。這就像是自定義引用類映射到對象引用以及自定義集合類映射到ORACLE集合。自定義對象類可以實現(xiàn)標(biāo)準(zhǔn)的JDBC接口或者一個ORACLE擴充接口來讀寫數(shù)據(jù)。JDBC使ORACLE對象作為特定JAVA類的實例化成為了現(xiàn)實。用JDBC訪問ORACLE對象需要2個步驟1)為ORACLE對象創(chuàng)建JAVA類,2)并填充這些類,你有兩個選擇讓JDBC實現(xiàn)結(jié)構(gòu)體類型對象。這在93頁上“使用為ORACLE對象的默認STRUCT類“中說明了。顯式指出ORACLE對象和JAVA類之間的映射。這包括為對象數(shù)據(jù)自定義你的JAVA類。該驅(qū)動程序然后必須能夠填充您指定的自定義對象類的實例。這涉及到一系列JAVA類的約束。為了滿足這些約束,你可以定義你的類去實現(xiàn)JDBC標(biāo)準(zhǔn)JAVASQLSQLDATA接口或ORACLE擴展ORACLESQLORADATA接口。這在910頁上“創(chuàng)建和使用自定義對象類為ORACLE對象“中說明了??梢允褂肙RACLEJPUBLISHER實用程序以生成自定義JAVA類。NOTE當(dāng)您使用SQLDATA接口時,必須使用一個JAVA類型映射來指定您的SQLJAVA映射,除非弱類型JAVASQLSTRUCT對象滿足。請參閱911頁“了解類型SQLDATA實現(xiàn)映射“。對于ORACLE對象使用默認的STRUCT類如果你不選擇自定義類作為你的SQLJAVA映射ORACLE對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理疏導(dǎo)與情緒管理策略計劃
- 建立科學(xué)的選拔機制計劃
- 2024年馬鞍山市人民醫(yī)院制招聘筆試真題
- 財務(wù)利潤模式計劃
- 前臺工作中的領(lǐng)導(dǎo)力發(fā)展計劃
- 積木與搭建游戲教育方案計劃
- 2024年扶余市事業(yè)單位招聘工作人員筆試真題
- 2024年畢節(jié)市廣播電視臺招聘筆試真題
- 2025年函數(shù)題軟件設(shè)計師試題及答案
- 法學(xué)概論應(yīng)試準(zhǔn)備試題及答案
- GB/T 3091-2025低壓流體輸送用焊接鋼管
- 第五講鑄牢中華民族共同體意識-2024年形勢與政策
- NB-T 47013.1-2015 承壓設(shè)備無損檢測 第1部分-通用要求
- GB/T 13912-2020金屬覆蓋層鋼鐵制件熱浸鍍鋅層技術(shù)要求及試驗方法
- 毽球校本課程
- 農(nóng)村建筑工匠培訓(xùn)講座ppt課件
- (高清版)建筑防護欄桿技術(shù)標(biāo)準(zhǔn)JGJ_T 470-2019
- 腦梗死標(biāo)準(zhǔn)病歷、病程記錄、出院記錄模板
- 主體結(jié)構(gòu)混凝土澆筑技術(shù)交底
- 幕墻設(shè)計任務(wù)書
- 貴州安順柏秧林煤礦發(fā)生重大透水事故人被困
評論
0/150
提交評論