




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
外文原文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標準SQLDATA接口或ORACLEORADATA接口的自定義類。這章還描述了在SQL表示中JDBC驅動怎樣訪問SQLJ對象類型下面的主題包括映射ORACLE對象對于ORACLE對象使用默認的STRUCT類創(chuàng)建和使用自定義對象類為ORACLE對象對象類型的繼承用JPUBLISHER來創(chuàng)建自定義對象類描述一個對象類型SQLJ對象類型NOTE有關ORACLE對象功能的一般信息和功能,請參閱ORACLE9I應用程序開發(fā)人員指南關系對象的功能。映射ORACLE對象ORACLE對象類型提供對數(shù)據(jù)庫中的復合數(shù)據(jù)結構的支持。例如,您可以定義一個類型人員具有屬性,如名稱(類型CHAR,電話號碼(類型CHAR)和雇員編號(類型NUMBER)。同時ORACLE還在ORACLE對象功能和它的JDBC之間間提供緊密地聯(lián)系,可以用一個標準的、泛型JDBC類型來映射到ORACLE對象,或者你可以自定義映射通過創(chuàng)建自定義JAVA類型定義類。在本書中,你創(chuàng)建映射到ORACLE對象的JAVA類會被當作自定義JAVA類來訪問或者進一步說是自定義對象類。這就像是自定義引用類映射到對象引用以及自定義集合類映射到ORACLE集合。自定義對象類可以實現(xiàn)標準的JDBC接口或者一個ORACLE擴充接口來讀寫數(shù)據(jù)。JDBC使ORACLE對象作為特定JAVA類的實例化成為了現(xiàn)實。用JDBC訪問ORACLE對象需要2個步驟1)為ORACLE對象創(chuàng)建JAVA類,2)并填充這些類,你有兩個選擇讓JDBC實現(xiàn)結構體類型對象。這在93頁上“使用為ORACLE對象的默認STRUCT類“中說明了。顯式指出ORACLE對象和JAVA類之間的映射。這包括為對象數(shù)據(jù)自定義你的JAVA類。該驅動程序然后必須能夠填充您指定的自定義對象類的實例。這涉及到一系列JAVA類的約束。為了滿足這些約束,你可以定義你的類去實現(xiàn)JDBC標準JAVASQLSQLDATA接口或ORACLE擴展ORACLESQLORADATA接口。這在910頁上“創(chuàng)建和使用自定義對象類為ORACLE對象“中說明了??梢允褂肙RACLEJPUBLISHER實用程序以生成自定義JAVA類。NOTE當您使用SQLDATA接口時,必須使用一個JAVA類型映射來指定您的SQLJAVA映射,除非弱類型JAVASQLSTRUCT對象滿足。請參閱911頁“了解類型SQLDATA實現(xiàn)映射“。對于ORACLE對象使用默認的STRUCT類如果你不選擇自定義類作為你的SQLJAVA映射ORACLE對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB62T 4428-2021 大豆品種 隴黃1號
- 年度合同簽署方案(3篇)
- 財務成本管理方案(3篇)
- 現(xiàn)代公司分紅方案(3篇)
- 毛坯裝修規(guī)劃方案(3篇)
- 豬場開工建造方案(3篇)
- 交警視頻巡檢方案(3篇)
- 供氣設施搶修方案(3篇)
- 公路路面水泥穩(wěn)定碎石底基層施工合同
- 扶貧大棚管理方案(3篇)
- 22新高考一卷數(shù)學答題卡
- 鐵路列車服務課件
- 考勤打卡異常情況表
- T∕ZZB 2774-2022 商用車用氣路電磁閥
- 民法典侵權責任編課件
- 員工手冊(格林豪泰)VDOC
- 高中數(shù)學蘇教版(2019)選擇性必修第一冊考前必背知識點 素材
- 幼兒園幼兒個人健康檔案
- 戶口本翻譯件
- 腦梗死標準病歷、病程記錄、出院記錄模板
- 整車數(shù)據(jù)展示,汽車設計資料
評論
0/150
提交評論