翻譯文獻(xiàn)-使用 oracle 對(duì)象類型_第1頁(yè)
翻譯文獻(xiàn)-使用 oracle 對(duì)象類型_第2頁(yè)
翻譯文獻(xiàn)-使用 oracle 對(duì)象類型_第3頁(yè)
翻譯文獻(xiàn)-使用 oracle 對(duì)象類型_第4頁(yè)
翻譯文獻(xiàn)-使用 oracle 對(duì)象類型_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

外文原文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對(duì)象類型這一章說明了JDBC支持用戶定義的對(duì)象類型,它討論的是ORACLESQLSTRUCT類的功能,以及如何將它映射到一個(gè)實(shí)現(xiàn)JDBC標(biāo)準(zhǔn)SQLDATA接口或ORACLEORADATA接口的自定義類。這章還描述了在SQL表示中JDBC驅(qū)動(dòng)怎樣訪問SQLJ對(duì)象類型下面的主題包括映射ORACLE對(duì)象對(duì)于ORACLE對(duì)象使用默認(rèn)的STRUCT類創(chuàng)建和使用自定義對(duì)象類為ORACLE對(duì)象對(duì)象類型的繼承用JPUBLISHER來創(chuàng)建自定義對(duì)象類描述一個(gè)對(duì)象類型SQLJ對(duì)象類型NOTE有關(guān)ORACLE對(duì)象功能的一般信息和功能,請(qǐng)參閱ORACLE9I應(yīng)用程序開發(fā)人員指南關(guān)系對(duì)象的功能。映射ORACLE對(duì)象ORACLE對(duì)象類型提供對(duì)數(shù)據(jù)庫(kù)中的復(fù)合數(shù)據(jù)結(jié)構(gòu)的支持。例如,您可以定義一個(gè)類型人員具有屬性,如名稱(類型CHAR,電話號(hào)碼(類型CHAR)和雇員編號(hào)(類型NUMBER)。同時(shí)ORACLE還在ORACLE對(duì)象功能和它的JDBC之間間提供緊密地聯(lián)系,可以用一個(gè)標(biāo)準(zhǔn)的、泛型JDBC類型來映射到ORACLE對(duì)象,或者你可以自定義映射通過創(chuàng)建自定義JAVA類型定義類。在本書中,你創(chuàng)建映射到ORACLE對(duì)象的JAVA類會(huì)被當(dāng)作自定義JAVA類來訪問或者進(jìn)一步說是自定義對(duì)象類。這就像是自定義引用類映射到對(duì)象引用以及自定義集合類映射到ORACLE集合。自定義對(duì)象類可以實(shí)現(xiàn)標(biāo)準(zhǔn)的JDBC接口或者一個(gè)ORACLE擴(kuò)充接口來讀寫數(shù)據(jù)。JDBC使ORACLE對(duì)象作為特定JAVA類的實(shí)例化成為了現(xiàn)實(shí)。用JDBC訪問ORACLE對(duì)象需要2個(gè)步驟1)為ORACLE對(duì)象創(chuàng)建JAVA類,2)并填充這些類,你有兩個(gè)選擇讓JDBC實(shí)現(xiàn)結(jié)構(gòu)體類型對(duì)象。這在93頁(yè)上“使用為ORACLE對(duì)象的默認(rèn)STRUCT類“中說明了。顯式指出ORACLE對(duì)象和JAVA類之間的映射。這包括為對(duì)象數(shù)據(jù)自定義你的JAVA類。該驅(qū)動(dòng)程序然后必須能夠填充您指定的自定義對(duì)象類的實(shí)例。這涉及到一系列JAVA類的約束。為了滿足這些約束,你可以定義你的類去實(shí)現(xiàn)JDBC標(biāo)準(zhǔn)JAVASQLSQLDATA接口或ORACLE擴(kuò)展ORACLESQLORADATA接口。這在910頁(yè)上“創(chuàng)建和使用自定義對(duì)象類為ORACLE對(duì)象“中說明了??梢允褂肙RACLEJPUBLISHER實(shí)用程序以生成自定義JAVA類。NOTE當(dāng)您使用SQLDATA接口時(shí),必須使用一個(gè)JAVA類型映射來指定您的SQLJAVA映射,除非弱類型JAVASQLSTRUCT對(duì)象滿足。請(qǐng)參閱911頁(yè)“了解類型SQLDATA實(shí)現(xiàn)映射“。對(duì)于ORACLE對(duì)象使用默認(rèn)的STRUCT類如果你不選擇自定義類作為你的SQLJAVA映射ORACLE對(duì)象

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論