




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DB2数据库对象基本数据库对象 数据库对象是一个数据据库的构造块(building block)。DB2 提供了不同类型型的数据库对象来来存储和表示不同同信息。通过使用用数据定义语言(DDL),可可以创建、修改和和删除数据库对象象。要操纵数据库库对象,可以使用用数据操纵语言(DML),例例如 SELECT、UPDATE、INSERT 和 SELECT 语句。常用的数数据库对象有:x。表 用户定义数据类型 约束 视图 索引 除了 Family Fundamentals 教程里介绍的一一些数据库对象外外,还有一些其他他的对象,很多开开发人员在开发 DB2 应用程程序时会发现这些些对象比较有用。本本
2、节我们将介绍这这些对象。v。在继续之前,有一点要要注意:在下面看看到的一些例子中中,对象名称是以以小写形式指定的的。无论 DB2 在哪个平台上运运行,它总是以大大写形式存储名称称,除非标识符的的名称以双引号()括起来了。R。例如,下面的语句创建建一个名为 employee(小小写)的表,该表表的列定义与表 EMPLOYEE(大大写)是一样的。8。CREATE TABLE employee LIKE employeez。别名 别名(alias) 是指一个已有的的表、视图的另一一个名称,也叫昵昵称(nickname)。别别名也可以作为另另一个别名的昵称称。与这些对象一一样,别名也可以以被创建或删除
3、,可可以有与之相关的的注释。下面是 CREATE ALIAS 语语句的一些例子:d。CREATE ALIAS aliastab1 FOR tab1;s。CREATE ALIAS bob.aliastab1 FOR tom.tab1;S。CREATE SYNONYM bob.aliastab2 FOR bob.aliastab1;c。可以看到,CREATE ALIAS 语语句比较简单。可可以在源对象所在在的同一模式中创创建别名(如第 1 行),或者者也可以全限定别别名(如第 2 行)。为了与 DB2 for zSeries 兼容,使用关键键字 SYNONYM 代替 ALIAS 也是合法的(如如第
4、 3 行)。A。使用别名时无需专门的的授权或权限。不不过,需要获得与与别名所引用的底底层对象相关的授授权。关于数据库库对象权限的完整整清单,请参考 DB2 DBA 认证教程 Server management(请请参阅 参考资料料)。e。前面已提到,我们也可可以为 昵称 创创建别名。昵称是是引用位于联邦系系统上的数据表或或视图的数据库对对象。联邦数据库库支持超出了本教教程的范围。在本本教程系列的第 2 部分,Data manipulation ,我们将学习更更多有关联邦系统统的知识。M。要为别名添加注释,可可以发出以下语句句:COMMENT ON aliastab1 IS My first a
5、lias on tab1r。要删除一个别名,使用用 DROP 语语句,这与所有其其他数据库对象是是一样的:v。DROP ALIAS aliastab1序列对象 序列(sequence)是是一种数据库对象象,这种对象允许许自动生成值。序序列对象与标识列列(identity column)不不同,标识列是要要与一个特定的表表绑在一起的,而而序列是一种全局局的、独立的对象象,同一个数据库库中的任何表都可可以使用它。X。标识列是序列对象的一一种特例。因此,标标识列的特征也适适用于序列对象。下下面就例释了一条条 CREATE SEQUENCE 语句:n。CREATE SEQUENCE myseq AS
6、INTEGERA。 START WITH 360 INCREMENT BY 10 NO MAXVALUE CYCLE CACHE 20 任何包括 0 在内的的数字数据类型都都可用于序列值。这这些类型包括 SMALLINT、INTEGER、BIGINT 或 DECIMAL。基基于这些数据类型型的任何用户定义义独特类型(distinct type)也都都可以用于序列值值。这进一步扩展展了用户定义独特特类型在应用程序序中的使用。 q。如上面的例子所示,您您可以为序列对象象指定起始值,从从而自定义序列对对象。在这个例子子中,序列的第一一个值是 360。后后续值的生成是由由 INCREMENT BY 子
7、句控制制的。这里还支持持正、负常量,以以产生升序和降序序值。 3。缺省情况下,一个序列列所生成的最小值值和最大值是由该该序列数据类型的的取值范围来界定定的。例如,INTEGER 类型的序列值必必须处在 -2,147,483,647 到 2,147,483,647 之间的范围内。在在 DB2 SQL Reference Guide 中中可以找到所有数数字数据类型的取取值范围。为了改改变这种缺省行为为,可以使用 MINVALUE 和 MAXVALUE 选项来为生成的的值设置一个边界界。如果达到了最最小值或最大值,那那么可以使用另一一个选项,即 CYCLE 或 NO CYCLE 来规定序列值是是否应
8、该循环。注注意,如果 CYCLE 生效,则序列就就可以生成重复的的值。j。CACHE 选项允许许 DB2 将一一些预先分配好空空间的值保留在内内存中,以提高性性能。CACHE 20 是缺省的的行为。关于这个个选项有一点要谨谨记:如果在所有有缓存的值被使用用之前关闭 DB2,那那么任何缓存的值值和未使用的值都都将被丢弃。当 DB2 重新启启动时,又会生成成和缓存下一块的的值,从而造成值值之间的不连续,即即值之间存在间隔隔。如果应用程序序不允许值之间有有间隔,可以考虑虑使用 NOCACHE 选项。o。如果没有使用缓存,则则性能就会下降,因因为要频繁地生成成序列数字。每当当生成一个新值的的时候,都会
9、写下下一条日志记录。因因此,更高效的做做法是根据请求来来获取值,并将这这些值缓存在内存存中。J。通过 ALTER SEQUENCE 语句,可以更改改序列对象的特征征。除了序列值的的数据类型以外,上上面所讨论的所有有的设置都可以修修改。要获得完整整的语法,请参考考 DB2 SQL Reference Guide (请请参阅 参考资料料)。W。删除一个序列对象与删删除任何其他的数数据库对象是一样样的,不同之处是是这里还要使用到到一个 RESTRICT 关键字。这样可可以防止在有依赖赖的情况下删除序序列。9。DROP SEQUENCE myseq RESTRICT生成和获取序列值 序列是一种数据库对
10、象象,因此对序列的的访问也是由权限限来控制的。缺省省情况下,只有序序列的创建者,即即 SYSADM 和 DBADM 拥有该对象的 USAGE 权权限。如果希望其其他用户也能够使使用序列,则需要要使用下面的语句句:W。GRANT USAGE ON SEQUENCE seq_object_name TO PUBLICU。有两种表达式可用于生生成和获取序列值值。NEXTVAL FOR seq-name 用于于获取下一个序列列值,而 PREVVAL FOR seq-name 则用用于获取上一个生生成的序列值。下下面的例子例释了了这些表达式的使使用。4。INSERT INTO t1 VALUES (NE
11、XTVAL FOR myseq, BOB);R。INSERT INTO t1 VALUES (NEXTVAL FOR myseq, PAT);g。COMMIT;INSERT INTO t1 VALUES (NEXTVAL FOR myseq, GENE);F。ROLLBACK;INSERT INTO t1 VALUES (NEXTVAL FOR myseq, PAUL);V。VALUES PREVVAL FOR myseq INTO :hostvarN。假设我们以一个空表 t1 开始,myseq 的下一个序列值值是 1。如果禁禁用了 autocommit,则则在执行上述语句句之后,t1 将将包
12、含下面几行:G。1NAME-1BOB2PAT4PAUL 3 record(s) selected.虽然为 GENE 生生成的值被回滚了了,但是 DB2 并没有再次使用用它。因而,下一一个为 PAUL 生成的序列值就就是 4,而不是是 3。 e。这个例子中的最后一条条语句展示了如何何使用 PREVVAL 表达式。宿主变变量 :hostvar 存储当前会话中中生成的最后一个个值。如果想保存存前面生成的值,那那么应该在生成下下一个值之前保存存 PREVVAL 值。j。临时表 顾名思义,临时表(temporary table)不不是永久性的数据据库对象。临时表表与普通的表在行行为上是一样的,不不同之处
13、是,并非非所有的功能和选选项都是受支持的的和/或是必需的的。临时表只能维维持在一次连接期期间。当连接关闭闭时,在此连接内内声明的所有临时时表都将自动删除除掉。 V。只有声明临时表的会话话或应用程序才能能访问临时表。如如果两个应用程序序用相同的名字创创建了一个临时表表,该临时表的每每个实例仍然是惟惟一的。因而,完完全不必担心出现现临时数据冲突的的情况。由于临时时表只允许单连接接(single-connection)访访问,因此这里无无需使用锁。这正正是临时表的一个个主要的性能优势势。U。声明临时表 要声明一个临时表,必必须存在一个 USER 临时表空间(不不同于 SYSTEM 临时表空间),用用
14、以存储临时表的的定义和内容。SYSTEM 临时表空间只是是 DB2 在内内部用来执行诸如如排序之类操作的的。下面这条简单单的语句将创建一一个用户临时表空空间。o。CREATE USER TEMPORARY TABLESPACE usertempspaceB。 MANAGED BY SYSTEM USING (usertempspace)1。声明全局临时表时,可可以使用很多可选选子句。下面的例例子对这些子句的的特性作了说明。Z。DECLARE GLOBAL TEMPORARY TABLE t_dept L。( deptid CHAR(6), deptname CHAR(20) )z。ON COM
15、MIT DELETE ROWS NOT LOGGEDIN usertempspace在这个例子中,声明了了临时表 t_dept,这这个表有两列。ON COMMIT DELETE ROWS 子句句规定在每次执行行 COMMIT 操作时删除临时时表的内容。在 DB2 V8 中,可以选择记记录对临时表的更更改,以便回滚。这这个例子规定对该该表的更改是 NOT LOGGED。这这意味着对该表的的任何操作,包括括创建以及更改,都都不做日志记录。如如果在一个工作单单位内创建表,然然后回滚,则临时时表将被删除。另另一方面,如果在在此工作单位内删删除该表,则该表表在恢复时将没有有任何行。U。无需使用 IN 子
16、句句来指定该临时表表将要使用的用户户临时表空间。如如果没有指定该信信息,DB2 就就会搜索最适用的的表空间。如果找找不到用户临时表表空间,DB2 将产生一个错误误。1。让我们看看另一个例子子:DECLARE GLOBAL TEMPORARY TABLE t_proj a。 LIKE project ON COMMIT PRESERVE ROWS WITH REPLACE IN usertempspace临时表 t_proj 是用 LIKE 关键字声明的,因因此它拥有与名为为 project 的持久表或视图图相同的列定义。ON COMMIT PRESERVE ROWS 子句句表明,在执行 COM
17、MIT 语句时,该临时时表中的所有行都都将被保留。因此此,这些行就可以以在下一次事务中中用于进一步的处处理。A。在同一次会话中使用相相同的名称声明另另一个临时表之前前,首先必须删除除该临时表。可以以显式地删除该表表,也可以像这里里一样使用 WITH REPLACE 选项。如果使用用了 WITH REPLACE 选项,DB2 将隐式地删除所所有数据,删除该该临时表,并用新新的定义重新创建建该临时表。U。如果使用了 连接池(connection pooling),WITH REPLACE 选项用起来就十十分方便了。连接接池是用于重用数数据库连接的一种种机制,这样就不不必完全按照要求求分配和回收资源
18、源。这些操作的开开销都是相当大的的,尤其是在有大大量执行很短事务务的连接时,更是是如此。由于没有有释放连接,先前前使用的临时表就就可能得不到清除除。下一个使用该该连接的应用程序序就可能使用上一一次执行时遗留下下来的数据。因此此,使用 WITH REPLACE 选项可以保证用用新的定义刷新所所声明的临时表。S。模式与数据库对象 大多数数据库对象都是是用一个 模式(schema) 和一个 对象名名(object name)标识识的。数据库模式式为数据库对象提提供逻辑上的分类类。下面例释了这这种分为两部分的的对象名:F。DB2ADMIN.EMPLOYEEHRPROD.AUDIT_VIEWHRPROD
19、.AUDIT_TRIG如果在访问数据库对象象时没有指定模式式,则用于建立数数据库连接的用户户 ID 将被设设为缺省的模式。例例如,如果用户 db2admin 连接到一个数据据库,并创建表 T1,则 DB2 将创建一个名为为 db2admin.T1 的表。此后所有有引用非全限定(unqualified)表表名 T1 的 SQL 语句都都解析为 db2admin.T1。q。DB2 专用寄存器:CURRENT SCHEMA 您在进行自己的数据库库工作时可能已经经发现,用同为对对象的模式的用户户 ID 连接到到一个数据库并非非总是可行的。而而硬编码(hard-coding)应应用程序以完全限限定对象也
20、不是最最好的解决办法。幸幸运的是,DB2 允许使用 SET CURRENT SCHEMA 命令更改当前模模式。缺省情况下下,CURRENT SCHEMA DB2 专用寄寄存器被设置为连连接到数据库的 USER。如果果更改 CURRENT SCHEMA,那那么任何非全限定定的数据库对象都都会在前面加上新新的值。I。当前模式可以通过下面面这个命令获得:VALUES CURRENT SCHEMA要对它进行更改,只需需使用下面的命令令:SET SCHEMA=db2adminDB2应用程序开发数数据库对象例程 在本节中,我们将介绍绍更多类型的数据据库对象。这些对对象统统都叫做 例程(routine)。从
21、从功能上分,主要要有三种例程:存存储过程(stored procedure)、函数(function)和和方法(method)。(要要了解这些类型之之间的更多不同之之处,请参阅 存存储过程、函数和和方法。)9。例程是封装了与某一特特定任务相关的编编程和数据库逻辑辑的数据库对象。有有效地使用例程可可以简化应用程序序的代码,并增加加代码的可重用性性。例如,如果将将某种业务逻辑封封装在一个例程中中,那么对此业务务规则的更改只会会影响那个特定的的例程。从而可最最小化对应用程序序的更改。6。例程是在数据库服务器器上定义和处理的的。这样就允许应应用程序利用数据据库服务器的能力力,从而减少客户户机上的处理负
22、载载。2。通常,复杂的业务逻辑辑需要多条 SQL 语句。这些语句句要分别地从客户户机发送到服务器器,如果数据库活活动很多,就会产产生大量的网络传传输。如果将这些些操作放在一个例例程中,那么客户户机和服务器之间间的网络传输就会会大大减少,从而而可以提高应用程程序的总体性能。X。加强安全的能力是使用用例程的另一个关关键优势。例程可可用于屏蔽对底层层数据库对象的直直接访问。用 EXECUTE 权限调用一个例例程就足够了,无无需拥有访问底层层数据库对象的显显式的权限。0。例程的不同实现 例程有几种可能的实现现:内置(built-in)例例程是 DB2 系统附带的。这这些例程定义在一一个系统模式中,例例
23、如 SYSIBM、SYSPROC、SYSFUN 和 SYSTOOLS。 9。Sourced 例程程只适用于函数。sourced 例程复制另一个个函数的语义。 w。外部(external)例例程是用一种外部部的编程语言实现现的。对于 DB2 V8.1,可以以用下列受支持的的语言开发例程: o。Java 语言 C/C+ OLE(仅用于存储过过程) OLE DB(仅用于于表函数) SQL 例程是用 SQL Procedural Language (SQL PL)实实现的。DB2 SQL PL 是 SQL Persistent Stored Modules (SQL/PSM) 语言标准的一一个子集。该
24、标准准是与 SQL 一起用来编写存存储过程、函数和和方法的结构化编编程语言的基础。它它将 SQL 数数据访问的容易性性与简单编程语言言的流控制结构相相结合。这就是 SQL PL 如此流行的一个个主要原因。M。存储过程、函数和方法法 存储过程 是一种数据据库对象,它包含含用于访问和修改改一个或多个表中中数据的专门程序序。在一个存储过过程内,可以以一一定的流逻辑包装装多条 SQL 语句。存储过程程可以作为对客户户机应用程序或其其他例程的子例程程扩展。存储过程程的执行和管理是是由一个关系数据据库管理系统(RDBMS)控控制的。K。函数 是可以自定义的的 SQL 扩展展。可以在 SQL 语句(例如一个
25、个 select-list 或 FROM 子句句)中调用函数。有有四种类型的函数数:聚合(aggregate)函函数、标量(scalar)函函数、行(row)函函数以及 表(table)函函数。 n。存储过程通常用于封装装复杂的应用程序序逻辑,以及执行行开销较大的数据据库操作,例如多多表联结和游标操操作。而函数 尤其是 SQL 函数 通常包含更更简单的操作。编编写在 SQL 函数中的语句将将展开到引用它们们的 SQL 语语句中,与这些 SQL 语句一一起执行。这导致致这些语句在执行行时动态编译。如如果一条 SQL 语句中使用了一一个复杂的 SQL 函数,则 DB2 要求使用附加的的资源来编译它
26、,并并生成一个数据访访问计划。这样将将影响整个运行时时性能。 a。方法 用于封装为结构构类型提供行为的的逻辑,结构类型型包含一个或多个个指定的属性,各各属性有其自己的的数据类型。p。DB2 专用寄存器:CURRENT PATH 与大多数 DB2 数数据库对象一样,一一个完整的例程名名由一个模式和一一个例程名组成。 DB2 专用寄寄存器 CURRENT SCHEMA可可以为大多数数据据库对象解析模式式,但不能为例程程解析模式。相反反,DB2 是使使用 CURRENT PATH 专用用寄存器来定位例例程的。n。通过下面的命令可以获获得 CURRENT PATH 设置置:VALUES CURRENT
27、 PATH缺省路径包含三个系统统模式,后面跟有有连接到数据库的的当前用户。例如如:6。SYSIBM,SYSFUN,SYSPROC,DB2ADMINT。下面是一些例子和技巧巧,您可以用它们们来更新 PATH:SET PATH=CURRENT PATH,USER2VALUES CURRENT PATH-SYSIBM,SYSFUN,SYSPROC,DB2ADMIN,USER2e。1 record(s) selected.嵌入式 SQL 程序序嵌入式 SQL 简介介 DB2 为开发人员提提供了不同的编程程方法来编写应用用程序。最直接的的一种方法是嵌入入式 SQL 编编程。这种编程方方法是 直接的,因因
28、为程序嵌入了直直接与 DB2 交互的 SQL 语句。程序可以以用下列受支持的的编程语言中的任任何一种来编写:6。C/C+ FORTRAN COBOL Java 语言 (SQLJ) 如何构造嵌入式 SQL 语句取决于所选选择的编程语言。C/C+ 和 FORTRAN 中的嵌入式 SQL 语句前面要加上上 EXEC SQL 关键字:T。EXEC SQL SELECT lastname,empid INTO :hostvar1, :hostvar2 i。FROM employee WHERE deptno=OPERATIONS;t。COBOL 中的嵌入入式 SQL 语语句非常类似于 C/C+ 中中的那
29、些嵌入式 SQL 语句,不不同的是在语句的的后面要使用 END-EXEC 关键键字:4。EXEC SQL SELECT lastname,empid INTO :hostvar1, :hostvar2 m。 FROM employee WHERE deptno=OPERATIONS END-EXEC;p。Java 语言中的嵌嵌入式 SQL 语句与前面两个个例子中展示的那那些嵌入式 SQL 语句稍微有些不不同,这里必须指指定语句将来执行行时所在的连接上上下文。下面是一一个例子:8。#sql myConnCtx SELECT lastname, empid INTO :hostvar1, :hos
30、tvar2 P。 FROM employee WHERE deptno=OPERATIONS;9。为了让您更好地了解嵌嵌入式 SQL 语句是什么样子子的,下面给出了了用 C 编写的的一个程序的代码码片断。在本系列列(请参阅 参考考资料)的第 3 篇教程中,您将将了解到更多关于于程序预编译和实实际代码开发的知知识。 TbBasic(void) int rc = 0; struct sqlca sqlca; EXEC SQL BEGIN DECLARE SECTION;3。 char hostVarStmt50; EXEC SQL END DECLARE SECTION; /* delc
31、are cursor */ EXEC SQL DECLARE c1 CURSOR FOR SELECT deptnumb, deptname FROM org WHERE deptnumb = 40;h。 /* open cursor */ EXEC SQL OPEN c1; /* fetch cursor */ EXEC SQL FETCH c1 INTO :deptnumb, :deptname;w。 while (sqlca.sqlcode != 100) printf( %8d %-14sn, deptnumb, deptname);6。 EXEC SQL FETCH c1 INTO
32、:deptnumb, :deptname;j。 /* close cursor */ EXEC SQL CLOSE c1; /* prepare the statement */ strcpy(hostVarStmt, DELETE FROM org WHERE deptnumb = 15);j。 EXEC SQL PREPARE Stmt FROM :hostVarStmt;9。 /* execute the statement */ EXEC SQL EXECUTE Stmt; /* ROLLBACK the transaction */ EXEC SQL ROLLBACK; return
33、 0;静态 SQL 在前一小节中,我们演演示了两种不同类类型的嵌入式 SQL 语句:静态嵌入入式 SQL 和和动态嵌入式 SQL。u。这个例子中的 SELECT 语句说明了静态态 SQL 的使使用。编写静态 SQL 时,必必须指定完整的语语句。表名、列名名以及所引用的数数据类型都是已知知的。惟一可以在在运行时指定的信信息是使用宿主变变量的 SQL 语句的 WHERE 子句中的值。2。编译静态 SQL 语语句(或者,用 DB2 术语更更确切地说,准备备好的(prepared)SQL 语句)时,将为为其生成数据访问问计划,并存储在在数据库中的一个个包里面。当调用用包含该语句的应应用程序时,这个个包
34、将被执行。由由于在运行时不需需要编译语句,因因此执行静态 SQL 时没用编译开销销。b。在准备语句时,DB2 使用数据库统计计信息和配置参数数来估计和获得访访问计划。如果数数据库统计信息有有变化,则预先生生成的访问计划可可能不如一开始生生成时那样是最佳佳的。k。创建包和将包与数据库库绑定时,要对准准备静态 SQL 语句的人进行授授权。只要执行包包的人拥有包的 EXECUTE 权限,他就不需需要具备该包中所所引用的数据库对对象上的显式的权权限。m。动态 SQL 动态(Dynamic SQL) 语句句是在运行时动态态处理的。语句的的结构直到执行应应用程序时才需要要。D。注意,嵌入式 SQL 简介
35、中展示的的例子 SQL 语句使用动态 SQL 来 PREPARE 和 EXECUTE 一条 DELETE 语句。DELETE 语句的文本存储储在一个宿主变量量 hostVarStmt 中。当该语句 PREPARE 好后,系统将生生成该语句的一个个可执行格式,并并将其存储在数据据库中的一个包里里面。一旦生成了了数据访问计划,准准备好的语句就可可以 EXECUTE 了。听起来好像像有点熟悉,不是是吗?是的:这两两个处理阶段与静静态 SQL 语语句正好是一样的的。惟一的不同点点是,动态 SQL 的 PREPARE 和 EXECUTE 都是在运行时进进行,而静态 SQL 在预编译时准备备访问计划,并将
36、将其保存在数据库库中。i。动态 SQL 语句必必须总是在执行之之前准备好,不管管是否有相同的语语句(相同的访问问计划)一次又一一次地重复使用。为为了最小化这些准准备工作的开销,DB2 提供了 包缓存存(也叫 动态查查询缓存),用以以将经常使用的访访问计划保存在内内存中。包缓存(package cache)明明显地减少了重复复的 SQL 准准备请求的代价,然然而发起和响应准准备请求的开销仍仍然存在。E。在准备语句时,总是使使用当前数据库统统计信息。因此,就就可以生成最佳的的数据访问路径。2。SQL 语句的授权是是在运行时决定的的。执行应用程序序的人必须有适当当的权限来访问语语句中所引用的数数据库
37、对象。下一一小节将更详细地地讨论 DB2 权限。W。安全考虑 要预编译嵌入式静态 SQL 程序,用用户需要程序中所所引用数据库对象象的显式的权限。由由于预编译或 PREPARE 阶段会生成一个个包,并将其存储储在数据库中,因因此该用户还必须须拥有 BINDADD 权限,以便添加加新的包到数据库库中。为了执行带带有静态 SQL 的程序,用户只只需具有相关包上上的 EXECUTE 权限。i。编译嵌入式动态 SQL 程序的用户也需需要 BINDADD 权限。这里不再再需求其他的权限限,因为动态 SQL 不是在编译时准准备的。在程序执执行时,用户需要要所有必需的权限限来发出每条 SQL 语句,同时还需
38、需要为嵌入式 SQL 程序创建的包上上的 EXECUTE 权限。x。下面的表总结了预编译译和执行一个只有有静态 SQL 或只有动态 SQL 的程序所需的权权限。 p。静态 SQL 与动态态 SQL在下面的表中,让我们们总结并详细阐述述我们所学到的关关于静态 SQL 和动态 SQL 的知识:L。基于驱动程序的 API基于驱动程序的 API虽然大多数供应商都支支持嵌入式 SQL 数据库访问,但但如果您想要使用用同样的源代码,并并将嵌入式 SQL 应用程序部署到到多个数据库系统统上,那么还需要要一个额外的工作作。必须用不同供供应商的特定的预预编译器预编译程程序。还必须生成成数据访问计划,并并绑定到目
39、标数据据库。为了增加应应用程序的可移植植性,还应考虑使使用本节介绍的 基于驱动程序的的解决方案。y。基于驱动程序的解决方方案需要一个驱动动程序管理器(driver manager),这这是与应用程序打打交道的界面。驱驱动程序管理器提提供了一套工业标标准的应用程序编编程接口(API),用用于访问数据源。应应用程序调用这些些 API,然后后被编译,再与管管理器的库链接。因因为驱动程序遵从从标准,所以应用用程序可以很容易易地使用(或装载载)正确的驱动程程序来访问不同供供应商的数据源。 7。在下面几小节中,我们们将看看 DB2 支持的一些 API。在在本系列后面的教教程中,您将更详详细地了解这些 AP
40、I。X。CLI 和 ODBC API DB2 Call Level Interface (CLI) 是是 IBM 对 DB2 数据库库服务器的可调用用 SQL 接口口。CLI 是用用于数据访问的一一个 C/C+ 应用程序编程程接口(API)。您您可以使用 DB2 CLI 开发动动态应用程序,就就像使用嵌入式动动态 SQL 语语句进行开发一样样。在这两种情况况下,SQL 语语句都是在运行时时准备和处理的。嵌嵌入式动态 SQL 要求有一个预编编译器,而 DB2 CLI 则没有有这种要求。您只只需编译应用程序序,并与 DB2 CLI 驱动程程序库链接。a。DB2 CLI 是基基于 Microsoft
41、 Open Database Connectivity (ODBC) 和 X/Open CLI 标准的的。在 ODBC 环境中,应用程程序与数据库服务务器之间的联系要要通过 ODBC 驱动程序管理器器。该管理器动态态地加载应用程序序需连接的数据库库服务器所需的驱驱动程序。ODBC 提供某些级别的的功能支持,当前前的 DB2 CLI 遵从 ODBC 3.51。X。要开发 DB2 CLI 应用程序,需要要 DB2 Application Development Client。它它包括编译和链接接 CLI 应用用程序时所有必需需的头文件和库。而而要开发 ODBC 应用程序,则需需要 Microsof
42、t 提供的一个 ODBC Developers Software Kit。m。下面的图对 DB2 CLI 与 ODBC 环境作了快速的的比较。Q。OLE DB 与 ADO.NET API Microsoft Object Link Embedded Database (OLE DB) 是一套接口,它它为应用程序提供供了对存储在不同同信息源上的数据据的统一访问,这这些不同的信息源源包括关系数据源源和非关系数据源源。OLE DB 架构由 OLE DB 提供者和和 OLE DB 消费者组成。DB2 同时支持这两种种角色。为了使 DB2 能够充充当 OLE DB 提供者,必须要要有 IBM OLE D
43、B Provider for DB2。这这是一个本地驱动动程序,支持通过过 OLE 接口口提取或查询 DB2 数据。g。下面的图展示了一个可可作为 OLE DB 消费者的的 DB2 数据据库,它可以访问问来自任何遵从 OLE DB 的数据源(例如如一个电子表格)的的数据。同样的 DB2 服务器器也可以作为一个个 OLE DB 提供者,为 OLE DB 消费者提提供数据。O。ActiveX Data Object .NET (ADO.NET) 是 Microsoft 提供的另一种数数据访问应用程序序接口。它是一种种新的数据访问模模型,将其前任(ADO)最最好的特性与传统统的数据库访问相相结合,集
44、成了 XML 支持,是是一种断开连接的的(disconnected)数数据架构。有三种种方法从一个 .NET 应用程序连接到到一个 DB2 数据库,如下图图所示。 I。JDBC 和 SQLJ API 至今为止,Java 平台已经享誉多多时,但仍有很多多人正在致力于扩扩展其功能和提高高其性能。访问和和操纵 DB2 的 Java 程序可以使用 Java Database Connectivity (JDBC) API,以及 Embedded SQL for Java (SQLJ) 标准。这两个个选项都是供应商商无关的 SQL 接口,通过标准准化的 Java 方法为应用程序序提供数据访问。y。JDB
45、C 是用于关系系数据库访问的 实际上的 标准准 Java API,这这种访问通过强大大的面向对象的接接口,使用动态 SQL。JDBC 将动态 SQL 传递给 DB2 附带的一个 JDBC 驱动程序。DB2 通过 JDBC API 执行 SQL 语句,结结果被传回给 Java 代码。JDBC 类似于 DB2 CLI,您无需需预编译或绑定 JDBC 程序序,因为 JDBC 使用动态 SQL。Z。而 SQLJ 程序则则包含静态嵌入式式 SQL 语句句。准备一个 SQLJ 程序时需要通过过类似于预编译和和绑定的步骤。在在编译 SQLJ 源文件之前,必必须用 SQLJ 翻译器对其进行行翻译,以创建本本地 Java 源代码。完成翻翻译后,需要使用用 DB2 for Java profile customizer (db2profc) 创建 DB2 包。w。DB2 遗留的基于CLI 的 JDBC 驱动程序 根据 Java 2 Platform, Enterprise Edition (J2EE) 规范,用于获得得数据访问的 Java 方法和接口可以以打包成 JDBC 驱动程序。D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园课后辅导服务合作合同(2篇)
- 2025私人借款合同范本下载
- 牙龈增生的临床护理
- 丰苹果肌的临床护理
- 漂亮的瓶子教学设计及反思
- 2025办公室租赁合同简单样本
- 2025汽车租赁合同协议书模板示例
- 《流行性感冒防控》课件
- 2025年统计师之初级统计工作实务提升训练试卷B卷附答案
- 2025年一级建造师之一建水利水电工程实务综合检测试卷A卷含答案
- 2025年上海房屋租赁合同模板
- 2024年西医临床模拟训练计划试题及答案
- 初级会计师考试历年真题试题及答案
- 2024年美容师考试要关注的法规与行业标准指导试题及答案
- 2024年汽车维修工社会服务意识试题及答案
- 2025年河南三门峡黄河明珠(集团)有限公司招聘笔试参考题库附带答案详解
- 昌乐县马宋水库防御洪水方案
- 运输机场机坪运行管理规定
- 第11课 为实现中国梦而努力奋斗 (教案)-2024~2025学年八年级历史下册新课标教学设计(人教部编版)
- DB62-T 4134-2024 高速公路服务区设计规范
- 关于防范第三方施工破坏燃气管道管理办法(暂行)
评论
0/150
提交评论