Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » UltraLite - C 及 C++ 编程 » 应用程序开发 » 使用嵌入式 SQL 开发应用程序

 

嵌入式 SQL 示例

嵌入式 SQL 是由 C/C++ 程序代码与伪代码组合而成的环境。可穿插传统 C/C++ 代码的伪代码是 SQL 语句的子集。预处理器将嵌入式 SQL 语句转换为函数调用,这些函数调用是被编译以创建该应用程序的实际代码的一部分。

下面是一个非常简单的嵌入式 SQL 程序示例。它演示了通过更改雇员 195 的姓氏对 UltraLite 数据库记录进行更新。

#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
main( )
{
   db_init( &sqlca );
   EXEC SQL WHENEVER SQLERROR GOTO error;
   EXEC SQL CONNECT "DBA" IDENTIFIED BY "sql";
   EXEC SQL UPDATE employee
      SET emp_lname = 'Johnson'
      WHERE emp_id = 195;
   EXEC SQL COMMIT;
   EXEC SQL DISCONNECT;
   db_fini( &sqlca );
   return( 0 );
   error:
      printf( "update unsuccessful: sqlcode = %ld\n",
         sqlca.sqlcode );
      return( -1 );
}

尽管此示例过于简单而没什么用处,但它说明了所有嵌入式 SQL 应用程序所共有的以下方面:

  • 每个 SQL 语句前面都有关键字 EXEC SQL。

  • 每个 SQL 语句都以分号结尾。

  • 一些嵌入式 SQL 语句不属于标准 SQL。INCLUDE SQLCA 语句就是一个例子。

  • 除 SQL 语句外,嵌入式 SQL 还提供执行一些特定任务的库函数。函数 db_init 和 db_fini 就是两个库函数调用的示例。

初始化

以上示例代码说明了在使用 UltraLite 数据库中的数据前必须包括的初始化语句:

  1. 使用以下命令定义 SQL 通信区 (SQLCA):

    EXEC SQL INCLUDE SQLCA;

    此定义必须是第一条嵌入式 SQL 语句,所以很自然地,它的位置应在包含列表的末尾处。

    如果应用程序中有多个 .sqc 文件,则每个文件中都必须有此行。

  2. 第一个数据库操作必须是调用名为 db_init 的嵌入式 SQL 库函数。该函数初始化 UltraLite 运行时库。在进行此调用前仅可执行嵌入式 SQL 定义语句。

    请参见db_init 函数

  3. 必须使用 SQL CONNECT 语句连接到 UltraLite 数据库。

准备退出

以上示例代码说明了在准备退出时必需执行的一系列调用:

  1. 提交或回退任何未完成的更改。

  2. 断开与数据库的连接。

  3. 调用名为 db_fini 的库函数结束 SQL 工作。

退出时,将自动回退所有未提交的数据库更改。

错误处理

在此示例中实际上没有任何 SQL 和 C 代码间的交互。C 代码仅控制程序流。WHENEVER 语句用于错误检查。在本示例中,在任何 SQL 语句引起错误之后执行错误处理操作 GOTO。


嵌入式 SQL 程序的结构