用 VC 开发 Oracle 数据库应用程序
Oracle 公司于 1997 年推出的 Oracle 8 数据库以其支持大数据库、多用 户的高性能事务处理、支持业界各项工业标准、完整的安全和完整性控制、支持 分布式数据库和分布处理,具有可移植性、可兼容性和可连接性等突出优点倍受 用户喜爱。 而在客户端的开发工具方面,Visual C++也因其强大的功能和高度的 灵活性等特点深受广大程序员的喜爱。 本文旨在介绍使用 Visual C++开发基于 Oracle 数据库应用程序的两种方法。 使用 PRO*C 开发数据库应用 1.PRO*C 工作原理 PRO 系列是 Oracle 公司提供的在第三代高级程序设计语言中嵌入 SQL 语 句来访问数据库的一套预编译程序,包括 PRO*Ada、PRO*C、PRO*COBOL、 PRO*Fortran、PRO*Pascal 和 P RO*PL/I 六种。程序员用相应的高级语言编 写嵌入 SQL 语句的 PRO 源程序(若用 C 语言则称为 PRO*C 源程序),然后运行 相应的预编译程序,把嵌入的 SQL 语句转换为标准的 Oracle 调用并生成目标源 程序,即纯高级语言格式的源程序,最后将这些源程序加入用户的程序中调用。 Oracle 预编译程序提供如下功能: 能用六种通用的高级程序
设计语言中的任何一种编写应用程序。 遵循 ANSI 标准,在高级语言中嵌入 SQL 语句。 可采用动态 SQL 方法,让程序在运行时接受或构造一个有效的 SQL 语句。 实现 Oracle 内部数据类型和高级语言数据类型之间的自动转换。 可通过在应用程序中嵌入 PL/SQL 事物处理块来改进性能。 能在程序行和命令行上指定所需要的预编译可选项,并可在预编译的过程中 改变它们的值。
能全面检查嵌入的 SQL 数据操纵语句和 PL/SQL 块的文法和语义。 可用 SQL*Net 并行存取多个地点的 Oracle 数据库。 可把数组作为输入和输出程序变量使用。 能对应用程序中的代码段进行条件预编译。 提供了较强的异常处理功能。 由此可见,通过预编译程序与其它高级语言的结合,既可以利用 SQL 强有力 的功能和灵活性为数据库应用系统的开发提供强有力的手段,又可以充分利用高 级语言自身在系统开发方面的优势,从而提供一个完备的基于 Oracle 数据库应 用程序的开发解决
方案。 2.在 VC 中使用 PRO*C 在 每个 PRO*C 源文件一般由程序头和程序体两部分组成。 程序头包含宿主变 量(SQL 语句中所包含的变量)说明、通讯区定义和 C 外部表示符的说明等。程 序体一般是由若干函数组成,这些函数内含有 SQL 语句(以 EXEC SQL 起头的语 句)。 PRO*C 支持的数据类型包括:VARCHAR2(变长字符串)、NUMBER(二进 制数)、INTGER(有符号整数)、FLOAT(浮点数)、STRING(以 NULL 结尾的字 符串)、VARNUM(变长二进制数)、 LONG(变长字符串)、VARCHAR(变长字 符串)、ROWID(二进制值)、DATE(定
长日期/时间值 )、VARRAW(变长二进 制数据)、RAW(定长二进制数据) 、LONGRAW(变长二进制数据)、UN SIGNED(无符号整数)、LONGVARCHAR(变长字符串)、LONGVARRAW(变 长二进制数据)、CHA R(定长字符串)、CHARZ(C 中定长以 NULL 结尾的字符 串)、MLSLABEL(变长二进制数据)。 在 PRO*C 中不能使用‘l’或‘u’作词尾或‘0x’作词头修饰常量;在 SQL 语句中 使用单引号来定义字符串,用双引号来定义特殊的或小写字符的标识符(如表名 等);SQL 语句中不允许使用 C 中的寻址、间接、位逻辑、复合赋值、?=、--、 ++、%、<<、>>操作符,并且用 NOT、AND、OR、=来分别代替!、&;&;、||、 ==。
下面的程序是一个连接数据库的 PRO*C 源程序例子。
____#include //声明 SQL 通讯区 ____#include ____#include ____EXEC SQL BEGIN DECLARE SECTION; ____VARCHAR username[20]; //声明宿主变量 ____VARCHAR password[20]; ____VARCHAR dbname[20]; ____EXEC SQL END DECLARE SECTION; ____void db_connect() ____{ ____strcpy((char *)username.arr,"SCOTT"); ____username.len = strlen((char *)username