




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电脑办公商务知识培训课件
- 2025年英语专业四级阅读理解长篇试卷:深度解析与备考指导
- 电网信息化相关知识培训课件
- Unit6Grammar课件-译林版九年级(2012)九年级英语上册
- 电缆电工小知识培训课件
- 2025合作合同-联合制作电影项目的协议
- 六年级语文下册卖火柴的小女孩教学设计新人教版新人教版小学六年级下册语文教案(2025-2026学年)
- 2025汽车销售合同样板
- 汉密尔顿合同
- 第三方租赁合同
- 音乐小动物回家课件20
- 中国桥梁发展史简介
- DB11-T 2006-2022 既有建筑加固改造工程勘察技术标准
- 审计案例第6章筹资与投资循环审计案例
- 神经介入治疗(DSA)及围手术期概述精品PPT课件
- 丙烯酸树脂安全技术说明书
- 相似三角形的判定2_课件(华师大版九年级上)
- 高等电力系统分析-潮流计算
- 焊接工艺评定报告完整版
- 第四章电磁波的传播
- 50MW光伏项目工程清单报价
评论
0/150
提交评论