DB2数据库对象基础知识.docx

上传人:夺命阿水 文档编号:1679414 上传时间:2024-11-24 格式:DOCX 页数:15 大小:121.51KB
返回 下载 相关 举报
DB2数据库对象基础知识.docx_第1页
第1页 / 共15页
DB2数据库对象基础知识.docx_第2页
第2页 / 共15页
DB2数据库对象基础知识.docx_第3页
第3页 / 共15页
DB2数据库对象基础知识.docx_第4页
第4页 / 共15页
DB2数据库对象基础知识.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《DB2数据库对象基础知识.docx》由会员分享,可在线阅读,更多相关《DB2数据库对象基础知识.docx(15页珍藏版)》请在课桌文档上搜索。

1、DB2数据库对象根本数据庠对象数据库对四是一个数据库的构造块(bui1.dingb1.ock).DB2提供了不同类型的数据库刻象来存储和表示不同信息,通过使用数据定义语言(DP1.),可以创立、修改和删除数据库对象,要操纵数据库对象,可以使用数据操纵语言(DM1.),例如SE1.ECT,UPDATE,INSERT和SE1.ECT语句.常用的数据库对象有:表用户定义数据类里约束视图索引除了Fami1.yFUndaKnIaIS教程里介绍的一些数据库对象外.还有一线其他的时象,很多开发人员在开发DB2陶川程序时会发现这些对象比较有用.本节我们将介绍这些对象.在继续之前,有一点要注;fi:在下面看到的

2、一些例子中,对象名称是以小写形式指定的。无论DB2在巩个平台上运行,它总是以大写形式存储名称,除非标识符的名称以双引号*,*)括起来了。例如,下面的语句创立一个名为emp1.oyee小写的表.该表的列定义与表EMP1.OYEE(大写)是一样的,CREATETAB1.E*emp1.oyee*1.IKEemp1.oyee则名别名(a1.ias)是指一个已有的表、视图的另一个名称,也叫呢称(nickname),别名也可以作为另一个别名的昵称.与这些对象一样,别名也可以被创立或捌除可以有与之相关的注糅.下面是CREATEA1.1.S语句的一些例子:CREATEA1.IASa1.iastabiFORta

3、bi:CREATEA1.IASbob.a1.iastabiFORto.tabi;CREATESYM(WYMbob.a1.ias1.ab2FORbob.a1.iastabi;可以看到,CREATEA1.IAS语句比较简单。可以在源对象所在的同一模式中创立别名(如笫1行),或者也可以全限定别名(如第2行)。为了与DB2forZSerieS兼容,使用关键字SYNSiYM代普A1.IAS也是合法的(如第3行使用别名时无JE专门的授权或权限,不过,需要获得与别名所引用的底层时象相关的授权。美于数据库对象权限的完整清单,请参考DB2DBA认证教程ServerInUniIKCInCn1.(请参阅参考资料.前

4、面已提到,我们也可以为昵称创立别名.昵称是引用位于联邦系统上的数据表或视图的数据库对望.联邦数据库支持超出了本教程的范围.在本教程系列的笫2局部,Datananipu1.ation.我的将学习更多有关联邦系统的知识.要为别名添加注释,可以发出以下语句:COMMEVrONa1.iastabiISMyfirsta1.iasontab要捌除一个别名,使用DRoP语旬,这与所有其他数犯库对象是样的:DROPA1.IASa1.iastabi序列对象序列(sequence)是一种数据库对象,这种对立允许自动生成值.序列对飘与标识列(identityco1.umn)不同.标识列是要与一个特定的表绑在一起的,

5、而序列是一种全局的、独立的对象,同一个数犯库中的任何表拙可以使用它。标识列是序列对弦的一种特例.因此.标识列的特征也适用于序列对象.下面就例择了-条CREATESEQ1.iENCE谙句:CREATESEQUENCEyseqSINTEGERSTARTWIIII360INCREMENTBY10NOMAXVA1.UECYC1CACHE20任何包括0在内的数字数据类型都可用于序列值.这些类型包括SM1U.1.INT.INTEGER,BIGINT或DECIMA1.基于这些数据类型的任何用户定义独特类型(distincttype)也都可以用于序列值,这进一步扩展了用户定义独特类里在应用程序中的使用,如上面

6、的例子所示,您可以为序列对阪指定起始值,从而自定义序列对象.在这个例子中,序列的第一个值是360.后续值的生成是由MCREYENTBY子句控制的,这里还支持正、负常fit以产生升序和降序(ft缺省情况下,一个序列所生成的最小值和球大值是由该序列数据类鞭的取值范恸来界定的,例如,INTEGER类型的序列值必须处在-2,147,483.647到2.147.483.647之间的范围内.在DB2SQ1.ReferenceGuide中可以找到所有数字数据类型的取值范围.为了改变这种缺省行为,可以使用MIXVA1.1.1E和MAXVAUJE选项来为生成的伯设过一个边界。如果到达了母小值或爆大值,加么可以使

7、用另一个选JS,即CYC1.E或NOCVC1.E来设定序列伯是否应该循环。注意,如果CXC1.E生效,则序列就可以生成重处的值。CACHE选项允许DB2拘一些预先分配好空间的值保存在内存中,以提高性能.CACHE20是缺省的行为.关于这个选项有一点要i堇记:如果在所有缓存的值鼓使用之前关闭DB2.僚么任何缓存的值和未使用的值都符被丢弃.当DB2重新启动时,又会生成和缓存下一块的伯.从而造成值之间的不连续,即值之间存在间隔.如果应用程序不允许伯之间有间隔,可以考虑使用NOCACHE选项,如果没有使用缓存.则性能就会下降,因为要频繁地生成序列数字.短当生成个新值的时候,都会写下一条H志记录.因此,

8、更高效的做法是根据请求来狭取值.并将这些值援存在内存中.通过A1.TERSEMiENCE语句,可以更改序列对象的特征,除了序列值的数据类型以外,上面所讨论的所有的设置都可以蟋改.要获得完整的谙法,请参考DB2SQ1.ReferenceGuide(请参阅参考资料).删除一个序列对象与删除任何其他的数据库对象是一样的,不同之处是这里还要使用到一个RESTKICT关键字。这样Ur以防止在有依赖的情况下捌除序列。DROPSEQVENCEmyseqRESTRICT生成和茨取序列值序列是一种数据库对象,因此时序列的访问也是由权限来控制的,决省情况下,只有序列的创立者,即SYSAMI和DBADM拥有该对象的

9、USAGE权限.如果希望其他用户也能膨使FM序列,则得要使用卜面的语句:GRANTUSAGEONSEQUENCEseq_objecta三eTOPUB1.IC有两种非达式可用于生成和换取序列(ft,NEXTVAI.I-ORSeq-name用于获取下一个序列值,而PREYVA1.FORSgFame则用于获取上一个生成的序列值,下面的例子例徉了这些表达式的使用,INSERTINTOt1.V1.1ES(NEXTVA1.FORayseq,BOB,);INSERTINTOUVA1.UES(NEXTVA1.FORayseq.,PAT,);COMMIT;INSERTINTOt1.VA1.fES(NEXTVA1

10、.FORByseq1GENE):RO1.1.BACK;INSERTINTOt1.VA1.UESNEXTVA1.FORayseq,PAU1.);VA1.UESPREWA1.FORmyseqINTO:h。S1.Yar假设我们以一个空表t1.开始,myseq的下一个序列值是k如果禁用了autocorait,则在执行上述语句之后,U将包含下面几行:1NAME1BOB2PATIPAU1.3record(三)se1.ected.虽然为CENE生成的(ft被回滚了,但是DB2并没有再次使用它.因而,下一个为PAU1.生成的序列值就是4,而不是3。这个例f中的最后一条语句展示了如何使用PREwA1.表达式.宿

11、主变fit:hostvar存储当前会话中生成的最后一个伯.如果想保存前面生成的值,那么应该在生成下一个但之前保存PHEVVAI.ft.,时表顾名思义,他时表(temporarytab1.e)不是永久性的数据库对象.临时表与普通的表在行为上是一样的,不同之处是,并非所有的功能和选项都是受支持的和/或是必需的。临时表只能城持在,次连接期间,当连接关闭时,在此连接内声明的所有临时表都将自动删除掉。只有声明临时长的会话或应用程序才能访问临时我.如果两个应用程序用相同的名字创立了一个临时代.该临时表的每个实例仍然是惟一的。因而,完全不必担忧出现峪时数据冲突的情况.由于临时表只允许单连接(SinR1.C-

12、connection)访问,因此这里无需使用锁。这正是格时表的一个主要的性能优势。声则时衰要声明一个格时表,必须存在个USER临时表空间(不同于SYSTEM格时衣空间),用以存储临时表的定义和内容.SYSTEM临时表空间只是DB2在内部用来执行诸如排序之类操作的.下面这条简单的谙句符创立一个用户临时表空间.CREATEUSERTEMPORARYTAB1.ESPACEUSerteBPSPaCeMANAGEDBYSYSTBIUSINGCuser1.cepspace)声明全局临时表时,可以使用很多可选子句.下面的例子对这些子句的特性作了说明。DEC1.AREG1.OBA1.TEMPORARYTAB1

13、.Etdept(deptidCI1.AR(6).deptnameCI1.AR(20)OXCOMMITDE1.ETEROWSNOT1.OGGEDINUsertcepspace在这个例子中,声明了临时衣JdePt,这个表干j两列,Oncommitde1.eterois子句册定在每次执行C(MM1.T操作时删除临时表的内容,在DB2V8中,可以选择记录对临时表的更改,以便回滚。这个例子规定对该表的更改足NOT1.OGGED,这意味着对该表的任何操作.包括创立以及更改,都不做日志记录.如果在一个工作单位内创立衣,然后I可滚,则临时我将被删除.另方面,如果在此工作单位内删除该表.则该表在愦狂时将没有任何

14、行.无需使用IN子句来指定该临时表都要使用的用户临时衣空间.如果没有指定该信息.DB2就会搜索最适用的表空间。如果找不到用户临时去空间,DB2将产生个错误。让我们乔看另一个例子,DECI.AREGWBA1.TEMPORARYTAB1.EIJroj1.IKEprojectONCOMMITPKES1.tKVERO,SWITHREP1.ACEINusertempspace临时表5Oj是用1.IKE关键字声明的,因此它拥有与名为PrOjeCt的持久表或视图相同的列定义。ONCOMMITPRESERVEROWS子句说明,在执行COMMIT语句时,该临时表中的所有行都将被保存。因此,这些行就可以在下一次事

15、务中用于进一步的处理.在同次会话中使用相同的名称声明丹一个彼时衣之前,首先必须删除该临时表。可以显式地删除该表,也可以像这里一样使用WITHREP1.ACE选项。如果使用了WITHREP1.ACE选项,DB2将隔式地IH除所有数据.IM除该幅时表.并用新的定义重新创立该临时表.如果使用了连接池(connectionpoo1.ing).UTHREP1.ACE选项用起来就十分方便了。连接池是用于由川数据库连接的一种机制,这样就不必完全按照要求分配和回收资源。这些操作的开销都是相当大的,尤其是在有大吊执行很短事务的连接时,更是如此.由于没有释放连接,先前使用的临时表就可能得不到去除,下一个使用该连接

16、的应用程序就可能使用上一次执行时遗留下来的数据.因此,f史用BITHKIT1.ACe选项可以保证用新的定义利新所声明的监时衣.模式与数据库对象大多数数据底对象都是用一个模式(schema)和一个对象名(Objectname)标识的。数据库模式为数据库时象提供龙耨上的分类,下面例择了这种分为两局部的对象名:DBzA1.MIN.EMP1.OYEEHRPROD.AUDn1.v1.EW1IRPROD.audittrig如果在访问数据库对象时没有指定模式,则用于建立数据库连接的用户ID将被设为缺省的模式。例如,如果用户db2admin连接到一个数据库.并创立表T1.则DB2招创立一个名为db2admin

17、.T1.的表.此后所有引用非全限定(unqua1.ified)友名T1.的SQ1.语句梯解析为db2adain.T1.,DB2专用存放号,CU1.SCHEMA您在进行自己的数据埠工作时可能已任发现.用同为对收的模式的用户11)连接到一个数据麻并非总是可行的,而硬编码hardCOding)应用程序以完全限定对象也不是最好的解决方法,幸运的是.DB2允许使用SETQJRRENTSQIHMA命令更改当前模式,跳省情况下,CIRRENTSCHEX1.ADB2专用存放器被设置为连接到数据际的USER.如果更改CURRENTSCHEMA,那么任何非全限定的数据库灼象都会在前面加上新的值,当前模式可以通过下

18、面这个命令获得:VA1.UESCURRENTSGIfiMASi时它进行更改,只制使用下面的命令:SETSCHKMA=db2adminDB2应用程序开发数据库对象例程在本节中,我们将介绍更多类型的数据席对象.这些对象统蛟椰叫做例程(routine).从功能上分,主要有三种例程:存储过程(storedprocedure)函数(function)和方法(method)。要了解这些类型之间的更多不同之处,请参阅存储过程、函数和方法,)例程是封装了与某一特定住芬相关的编程和数据库逻辑的数据诲对有效地使用例程可以简化应用程序的代码,并增加代码的可无用性,例如,如果将某种业务逻辑时装在一个例程中,那么对此业

19、务规则的更改只会影响那个特定的例程。从而可疑小化对应用程序的更改.例程是在数据库效劳SS上定义和处理的.这样就允许应用程序利用数据冰效劳港的能力,从而减少客户机上的处理负我。通用.红杂的业务逻辑需要多条SQ1.谱句.这些谱句要分别地从客户机发送到效劳满,如果数据库活动很多.就会产生大盘的网络传输.如果将这线操作放在一个例程中,那么客户机和效劳器之间的网络传输就会大大减少,从而可以提高应用程序的总体性能,加强平安的能力是使用例程的另一个关键优势.例程可用于屏蔽对底层数据库对象的直接访问.用EXECirTE权限两用一个例程就足修了,无需拥有访问底层数据库对象的显式的权限.例程的不同实现例程有几种可

20、能的实现:内置(bui1.1.-in)例程是DB2系统相带的,这些例程定义在一个系统模式中,例如SYSIBM.SYSPROC,SYSFfN和SYSToO1.S。Sourced例程只适用于函数.sourced例程狂制为一个函数的诏义.外部(externa1.)例程是用一种外部的编程谱言实现的.对于DB2V8.1,可以用以下受支持的语言开发例程:Javai11C/C+O1.E(仅用于存储过程O1.EDB(仅用于表函数)SQ1.例程是用SQ1.Procedura1.1.anguageSQI.P1.)实现的.I)B2SQ1.P1.是SQ1.PersistentStoredModu1.es(S(J1.P

21、SM)语言标准的一个子集,该标准是与SQ1.起用来编写存储过程、函数和方法的结构化编程语言的坛础.,它将SQI.数据访问的容易性与他单编程语言的流控却结构相结合.这就是SQ1.P1.如此流行的一个主要原I乱存储过程、函数和方法存谛过程是一种数据库对象,它包含用于访问和修改一个或多个表中数据的专门程序.在一个存储过程内,可以以一定的流逻辑包笠多条SQ1.语句.存储过程可以作为对客户机应用程序或其他例程的于例程扩展.存储过程的执行和管理是由一个关系数据库管理系统(RDBMS)控制的。函数是可以自定义的SQ1.扩展.可以在SQ1.谙句(例如一个se1.ect1.ist或I=ROM子句)中谓用函数.有

22、四种类型的函数:聚合(aggregate)函数、标砒(sca1.ar)函数、行(row)函数以及表(tab1.e)函数.存储过程通常用于封装发杂的应用程序设辑,以及执行开销较大的数据库操作,例如多表联结和讷标操作,而由数一一尤其是SQ1.函数-一通常包含更简单的操作.端写在SQ1.函数中的语句将展开到引用它的的SQ1.语句中,与这些Stf.语句一起执行,这导致这些语句在执行时动态编译,如果一条SQ1.语句中使用了一个史杂的SQ1.函数,则DB2要求使用附加的资源来编译它,井生成一个数据访问方案,这样将影响整个运行时性能,方法用于封装为结构类型提供行为的逻辑.结构类型包含一个或多个指定的属性,各

23、属性有其自己的数据类型.DB2专用存放CURR0CPATH与大多数DB2数据库对象一样,一个完整的例程名由一个模式和一个例程名组成.DB2专用存放湍CURRENTSQIkUA可以为大多数数据库对解析模式,但不能为例程解析模式.相反,DB2是使用CURRENTPATH专用存放器来定位例程的。通过下面的命令可以获得CURRENTP71I设置:VA1.UESCURRENTPATH缺省路径包含三个系统模式,后面跟有连接到数据库的当前用户,例如:SYS1W,SYSFHSPROC-JDB2ADX11N下而是一些例子和技巧,您可以用它们来更新PATH,SETPatii=C1.RREXTPATH.,IISER

24、2*VA1.UESCURRENTPATH*SYSIBMSYSFfN*,SYSPROC*,*DB2DMIN1.SER2*Irecord(三)se1.ected.嵌入式SQ1.程序嵌入式SQ1.倚介DB2为开发人员提供了不同的编程方法来津写应用程序。最H接的一种方法是嵌入式SQ1.编程。这种编程方法足宜接的,因为程序嵌入了宜接与DB2交互的SQ1.语句.程序可以用以下受支挣的煽程谱力中的任何一种来编写:C/C+FORTRANCOBO1.Java语言(SQ1.J)如何构造成入式SQ1.语句取决于所选择的编程语言。C/C+和FORTRAN中的战入式SQ1.语句前面要加上EXECSQ1.关健字:EXEC

25、SQ1.SE1.ECT1.astna三e,cmpidINTO:h。SIYar1.:hostvar2FROMempIoyeeW1.IEKEdeptno=-OPERTIONS*;CoBO1.中的嵌入式SQ1.语句非常类似于C/C+中的那些嵌入式SQ1.语句,不同的是在语句的后面要使用EM)EXEC关键字:EXECSQ1.SE1.ECTIaSInac,CmPidINTOIhostvar1.1:hostvar2IjROMemp1.oyeeWHEREdeptno=*OPERTIONS,ENDEXEC:JaVa语言中的嵌入式SQ1.语句与前面两个例子中展示的那些嵌入式SQ1.语句梢微有些不同,这里必须指定

26、语句将来执行时所在的连接上下文.下面是一个例子:#Sq1.myConnC1.x(SE1.ECTIastnamv,eidINTO:hostvar1.,:h。SIVar2TOOMemp1.oyeeWHEREdeptno-*OPERTIONS*;为了让您更好地了斛嵌入式SQ1.语句是什么样子的,下面给出了用C编写的一个程序的代码片断,在本系列(请参闽参考资料的第3篇教程中,您将了解到更多关于程序预摘译和实际代码开发的知识.intTbBasic(void)intrc=0:structsq1.casq1.ca;EXECSQ1.BEGINDEC1.ARESECTION;charhostVarStrnt50

27、;EXECSQ1.ENDDECI,RESECTION:/de1.carecursor*/EXECSQ1.DEC1.AREc1.CURSORFORSE1.ECTdeptnumb,deptnameIROMorgVHEREdeptnumb二40;opencursor/EXECSQ1.OPENc1.:fetchcursor/EXECSQ1.FETCHc1.INTO:deptnumb,:deptname;whi1.e(sq1.ca.sqIcode!-100)Printfr8d%-1.z1.sn*.deptnumb,deptname);EXECSQ1.FETeHc1.INTO:deptnumb.:dept

28、name;*c1.osecursor/EXECSQ1.C1.OSEc1.;*preparetheStateaent/Strcpy(hostVarStmt,DE1.ETEEROMorgBHEREdeptnumb=15);EXECSQ1.PREPARES1.mtFROM:h。S1.VarSI1;/executetheStateeent/EXECSQ1.EXECUTEStmt;RO1.1.BACKthetransaction*/EXECSQ1.RO1.1.BACK;returnO:得态SQ1.在前一小节中我们演示了两种不同类型的嵌入式SQ1.谱句:静态嵌入式SQ1.和动态嵌入式SQ1.这个例子中的S

29、E1.ECT语句说明了静态SQ1.的使用.编写静态SQ1.时,必须指定完整的语句.表名、列名以及所引用的数据类型都是的.惟一可以在运行时指定的伯恩是使用宿主变后的Sq1.语句的WHERE子句中的值.编译静态SQ1.语句(或者,用DB2术语更确切地说,准备好的(prepared)SQ1.语句时,将为其生成数据访何方案并存储在数据库中的一个包里面.当调用包含该语句的应用程序时.这个包将被执行.由于在运行时不需要编译语句,因此执行静态SQ1.时没用编译开销.在准备语句时,DB2使用数据库统计信思和配置参数来估计和获得访问方窠,如果数据库统计信息有变化,则预先生成的访问方案可能不如一开始生成时那样是最

30、正确的.创立包和将包与数据库绑定时,要对准备静态SQ1.语句的人进行授权。只要执行包的人拥有包的EXECHE权限,他就不需要具善该包中所引用的数据库对象上的显式的权限。动态SQ1.动态(DynamicSQ1.)语句是在运行时动态处理的,语句的结构出到执行应用程序时才需要。注意.战入式SQI.简介中展示的例子SQ1.语句使用动态SQI.来PREPARE和EXECUTE一条DE1.ETE语句.DE1.ETE语句的文本存储在个宿主变依hostYarStmt中.当该语句PREPARE好后,系统将生成该语句的个可执行格式,并将其存储在数据库中的一个包里面。一旦生成了数据访问方窠,准备好的语句就可以EXE

31、CirTE了。听起来好似有点熟悉,不足吗?是的:这两个处理阶段与静态SQ1.语句正好是一样的.惟一的不同点是.动态SQ1.的PREPARE和EXECtTE都是在运行时进行,而静态SQI.在预编译时准备访问方案,并翱具保存在数据库中.动态SQI.语句必须总是在执行之前准备好,不管是否有相同的语句(相同的访问方案)一次又一次地重发使用.为了最小化这些准备工作的开销,DB2提供了包缓存(也叫动态查询缓存,用以将经常使用的访问方案保存在内存中,包缓存(packagecache)明显地减少了景复的Sy1.准备请求的代价.然而发起和响应准备请求的开销仍然存在。在准备谱句时,总是使用当前数据库统计信息.因此

32、.就可以生成最正确的数据访问路径.SQI.语句的授权是在运行时决定的,执行应用程序的人必须有适当的权限来访问语句中所引用的数据库对象。下一小节将更详细地讨论DB2权限。平安考电要预编译成入式龄态SQ1.程序,用户需要程序中所引用数据库对象的显式的权限,由于预编译或PREPARE阶段会生成一个包并将其存储在数据库中,因此该用户还必须拥行B1.WADD权限.以便添加新的包到数据库中.为了执行带有静态SQI.的程序,用户只需具有相关包上的EXECUTE权限.编译嵌入式动态SQ1.程序的用户也需要BINDADD权限,这里不再需求其他的权限,因为动态SQ1.不是在编谛时准备的.在程序执行时,用户备要所有

33、必需的权限来发出每条SQ1.谱句.同时还需要为嵌入式SQ1.程序创立的包上的EXEC1.TH权限.卜面的衣总结了预编译和执行一个只有静态SQ1.或只有动态SQ1.的程序所需的权限。角色对于静态SQ1.所需的权限对于动态SQ1.所需的权限BIHDADD添加新包到开发人员(预编译数据库中的权限;该程序数据库对象上显式的权限BIHDADD添加新包到数据库中的权限应用程序用户(执行该程序)EXECUTE执行与程序相关的包的权限数据库对象上显式的权限;EXECUTEt行与程序相关的包的权限方SQ1.与动方SQ1.在下面的女中,让我们总结弁详细阐述我们所学到的关于静态SQ1.和动态SQ1.的知识:基于驱动

34、程序的API基于驱动程序的AP1.虽然大多数供给商都支持嵌入式Sq1.数据库访问,但如果您想要使用同样的源代码,并将嵌入式SQ1.应用程序部署到多个数据库系统上,那么还需要一个额外的作.必须用不同供给商的特定的预编译器预端译程序.还必须生成数据访问方案,并绑定到日惊数据库.为了增加应用程序的可移位性,还应考虑使用本节介绍的基于驱动程序的解决方案。基于驱动程序的解决方案需要一个亮动程序管理(drivermanager),这是与应用程序打交道的界面.驱动程序管埋器提供了一套工业标准的应用程序编程接I(API),用于访问数据源.应用程序调用这些API,然后被编详,再与管理器的陈钺接,因为驱动程序遵从

35、标准,所以应用程序可以很容易地使用(或装载)正确的驱动程序来访问不同供给商的数据源.在下面几小节中,我们将看看DB2支持的一些API.在本系列后面的教程中,您将更详细地了解这些API.C1.I和ODBCAPIDB2Ca1.1.1.eve1.Interface(CIJ)是IBM对DB2数据库效劳器的可调用SQI.接II.C1.I是用于数据访问的一个CC应用程序编程接口(API),您可以使用DB2C1.I开发动态应用程序,就像使用嵌入式动态SQ1.语句进行开发一样.在这两种情况下,SQI.语句都是在运行时准备和处理的.嵌入式动态SQ1.要求有一个预编译器,而DB2C1.1.则没有这种要求.您只得端

36、洋应用程序,并与DB2C1.I驱动程序库鞋接.DB2C1.I是暴于MicrosoftOpendatabaseConnectivity(ODBC)和X/OpenC1.I标准的,在ODBC环境中,应用程序与数据库效劳器之间的联系要通过ODBC物动程序管理器,该管理浮动态地加或应用程序需连接的数据库效劳器所需的驱动程序.ODBC提供某些级别的功能支持.当前的DB2C1.I遵从ODBC3.51.要开发DB2Cu应用程序.备要DB2App1.icationDeve1.opmentC1.ient.它包括编译和超接C1.1.陶用程序时所有必淅的头文件和库.而要开发ODBC应用程序,则需要Microsoft提

37、供的一个ODBCDeve1.opersSoftwareKit.下面的图对DB2CU与ODBC环境作了快速的比较.ODBCDf1.verManagerEnvironmentAppUabonIOOBCDrivefMdnegerD2CUEnvironmentDB2(MVS)SQUDSSQU400Othe4driver架构的DR2效劳器建立直接Java连接。该驱动程序也有两个实现类,分别叫做JavaCom1.nonC1.ient(JCC)Type2driver和JCCTyPC4driver实现类的名称是com.ibm.db2.jcc.DB2Driver*.结束语本教程介绍了I)B2应用程序开发的基础.

38、在进行开发之前,您衢要熟悉不同类型的数据库对象.在本教程中,介绍了一些高级的数据年对象.别名、序列对象以及临时表常用于简化应用程序的代码,存储过理、函数和方法主要用于封装程序和数据库逻辑,本教程讨论了使用例程的一线优点,例如收少网络传输,加初平安,以及提高代玛的可里用性.您应该根据应用程序逻辑的我杂性,选择将逻班时装在过程和函数中。存储过程可作为程序的子例程,通常包含史杂的应用程序逻辑.而用户定义函数则是对SQ1.的一种扩展。它们以简单的语句和逻辑高效地执行。在本教程中,我们还介绍了一些编程方法.嵌入式SQ1.编程允许将SQI.语句嵌入在用C/C+、FORTRAN、COBO1.或Java语言编写的程序中,本教程还强调了静态SQ1.代码和动态SQ1.代码的特征。您御要理解两者之间的不同之处,以便在使用他态SQ1.语句与使用动态SQ1.语句之间作出选择。应用程序编程接11,例如C1.I,O1.)B3A1.X)、01.EDB和JDBC椰是动态程序.DB2提供了本地驱动程序,使得应用程序能助通过这些接口使用DB2数据,而SQ1.J则是种用Java语言编写的静态程序,我们还讨论了关于应用程序如何使用这%API与DB2打交道的基础.掌握了本教程中介绍的这些DH2应用程序开发基础,现在您就可以学习更多关于不同开发方法的深入的信息.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号