您是 DB2 应用程序开发新手吗?有了此实用指南,您将立刻掌握 DB2 的习惯与文化。
如果您已经习惯了基于一种数据库开发应用程序,那么切换到不同的数据库就像是到本国的另一个地区去旅行一样。基本语言虽然差不多,但是很可能不熟悉当地的方言。
当与那些将自己的应用程序从其他供应商的产品迁移到 DB2 Universal Database(DB2 UDB)的人们一起工作时,我发现如果他们一开始能掌握 DB2 环境特有的一些基本概念和术语,就可以取得更大的成功。
这里是特定于 DB2 应用程序开发的几个关键概念的快速指南。关于更详细的探索,请参阅 DB2 Application Development Certification Guide(Prentice Hall,2000 年)、DB2 Application Development Guide(可在 ibm.com/software/ data/db2/udb/ ad/v7/adg.html上获取)和 Application Building Guide( ibm.com/software/ data/db2/java/ v6/abg.html)。
嵌入式 SQL
DB2 通过其预编译器支持 C、C++、Java(SQLJ 和 Java 数据库连接)、COBOL 和 FORTRAN。您可以采用其中一种宿主编程语言编写包含 SQL 语句的应用程序。嵌入在应用程序中的 SQL 语句提供到数据库的接口,宿主语言为应用程序的执行提供必要的支持。而 DB2 预编译器可以将 SQL 语法直接转换为 DB2 运行时服务应用程序编程接口(API)调用。
静态 SQL
嵌入式静态 SQL 和嵌入式动态 SQL 都要用到 DB2 预编译处理。然而,在已知数据库将被查询哪些问题时(例如,在航空订票系统中),就可以使用静态 SQL 语句。对于静态 SQL 语句,在进行预编译之前就知道 SQL 语句的类型以及表的列名。而未知的元素是语句进行搜索或更新的特定数据值,并且这些值是用宿主语言变量来表示的。宿主变量包含的是数据,而不是 SQL 语句。在运行应用程序之前要准备或者构建静态 SQL 语句。
清单 1 展示了 C 程序中的样本嵌入式静态 SQL。请注意容纳数据的宿主变量(例如, EXEC SQL FETCH c1 INTO :pname, :dept; )和由 EXEC SQL 为预编译目的而分隔的 SQL 语句的用法。
为了使用包含嵌入式 SQL 的程序,不仅要进行典型的准备步骤(编译、链接和运行),还必须执行 DB2 预编译和绑定步骤(见 图 1)。而这些步骤将为数据库管理器创建执行时需要的程序包:
1. 预编译:将嵌入式 SQL 源语句转换为数据库管理器可使用的形式。
2. 编译和链接:创建必要的目标模块。
3. 绑定:创建运行程序时数据库管理器将使用的程序包。
预编译器(带有 BINDFILE 和 PACKAGE 选项的 PREP 命令)将嵌入式 SQL 语句转换为注释。接着,它将生成宿主编译器可处理的 DB2 运行时 API 调用。然后,预编译器将生成相应信息(存储在程序包或绑定文件中),数据库管理器将使用这些信息对数据库执行 SQL 语句。
预编译器选项 BINDFILE 创建一个绑定文件,用于存储创建程序包所必要的数据。
预编译器选项 PACKAGE 进行隐式绑定并且将程序包存储在已连接的数据库中。程序包是存储在数据库中的一种对象,其中包括执行单个源文件中的特定 SQL 语句所需的信息,这类信息又被称为存取路径。

