




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
外文原文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类的功能,以及如何将它映射到一个实现JDBC标准SQLDATA接口或ORACLEORADATA接口的自定义类。这章还描述了在SQL表示中JDBC驱动怎样访问SQLJ对象类型下面的主题包括映射ORACLE对象对于ORACLE对象使用默认的STRUCT类创建和使用自定义对象类为ORACLE对象对象类型的继承用JPUBLISHER来创建自定义对象类描述一个对象类型SQLJ对象类型NOTE有关ORACLE对象功能的一般信息和功能,请参阅ORACLE9I应用程序开发人员指南关系对象的功能。映射ORACLE对象ORACLE对象类型提供对数据库中的复合数据结构的支持。例如,您可以定义一个类型人员具有属性,如名称(类型CHAR,电话号码(类型CHAR)和雇员编号(类型NUMBER)。同时ORACLE还在ORACLE对象功能和它的JDBC之间间提供紧密地联系,可以用一个标准的、泛型JDBC类型来映射到ORACLE对象,或者你可以自定义映射通过创建自定义JAVA类型定义类。在本书中,你创建映射到ORACLE对象的JAVA类会被当作自定义JAVA类来访问或者进一步说是自定义对象类。这就像是自定义引用类映射到对象引用以及自定义集合类映射到ORACLE集合。自定义对象类可以实现标准的JDBC接口或者一个ORACLE扩充接口来读写数据。JDBC使ORACLE对象作为特定JAVA类的实例化成为了现实。用JDBC访问ORACLE对象需要2个步骤1)为ORACLE对象创建JAVA类,2)并填充这些类,你有两个选择让JDBC实现结构体类型对象。这在93页上“使用为ORACLE对象的默认STRUCT类“中说明了。显式指出ORACLE对象和JAVA类之间的映射。这包括为对象数据自定义你的JAVA类。该驱动程序然后必须能够填充您指定的自定义对象类的实例。这涉及到一系列JAVA类的约束。为了满足这些约束,你可以定义你的类去实现JDBC标准JAVASQLSQLDATA接口或ORACLE扩展ORACLESQLORADATA接口。这在910页上“创建和使用自定义对象类为ORACLE对象“中说明了。可以使用ORACLEJPUBLISHER实用程序以生成自定义JAVA类。NOTE当您使用SQLDATA接口时,必须使用一个JAVA类型映射来指定您的SQLJAVA映射,除非弱类型JAVASQLSTRUCT对象满足。请参阅911页“了解类型SQLDATA实现映射“。对于ORACLE对象使用默认的STRUCT类如果你不选择自定义类作为你的SQLJAVA映射ORACLE对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省宣城市郎溪县2023-2024学年高一上学期期末考试历史题目及答案
- 幽默三国读后感550字(9篇)
- 售后服务流程标准化服务脚本
- 城市绿化养护项目管理合同
- 营销方案撰写指南
- 可爱的小仓鼠爱的作文(15篇)
- 时间变化的声音课件
- 通稿2003读后感9篇范文
- 诗歌修辞手法与意境构建:八年级古诗鉴赏教案
- 记一件令我感动的事感动作文(10篇)
- 水泵设备单机试运转记录
- 完整版医院体检报告范本
- 速成意大利语(上)
- 彭静山针灸秘验
- Q∕SY 1535-2012 海底管道混凝土配重层技术规范
- 生育服务证办理承诺书空白模板
- 壳寡糖功能课件
- 腰椎间盘突出症的护理查房课件(PPT 27页)
- 项目评审检查清单(质量阀)
- 篮球战术传切配合“一传一切”课时教学计划
- 新建搅拌站策划方案样本21
评论
0/150
提交评论