第9讲-嵌入式SQL语言之基本技巧

900-本讲学习什么(1分47秒)及第9讲教学课件PDF

901-什么是嵌入式SQL语言(10分20秒)

因此,高级语言+SQL语言:

既继承高级语言的过程控制性又结合SQL语言的复杂结果集操作的非过程性,同时又为数据库操作者提供安全可靠的操作方式:通过应用程序进行操作。

嵌入式SQL语言:

将SQL语言嵌入到某一种高级语言中使用。

这种高级语言,如C/C++,Java,PowerBuilder等,又称宿主语言(Host Language)

嵌入在宿主语言中的SQL与前面介绍的交互式SQL有一些不同的操作方式

902-程序与数据库连接(6分35秒)

903-为什么需要提交和撤销(7分54秒)

904-嵌入式SQL程序的一个示例(5分50秒)

905-为什么需要游标(5分41秒)

游标是指向某检索记录集的指针

通过这个指针的移动,每次读一行,处理一行,再读一行...,直至处理完毕

游标(Cursor)的使用需要先定义、再打开(执行)、接着一条接一条处理,最后再关闭

906-游标应用示例(9分13秒)

907-可滚动游标(4分22秒)

可滚动游标移动时需判断是否到结束位置,或到起始位置

  • 可通过判断是否到EOF位置(最后一条记录的后面),或BOF位置(起始记录的前面)
  • 如果不需区分,可通过whenever not found语句设置来检测

908-利用游标进行数据库增删改(3分32秒)

909-利用游标编写的一个程序(3分42秒)

910-异常状态捕获机制(14分26秒)

第9讲模拟练习题

21执行下面的程序:

int main()

{   

	exec sql  whenever  sqlerror  goto  handle_error;
	
	exec sql  create table customers(cid  char(4)  not null, cname varchar(13), …);
	
	…
	
	handle_error:
	
	exec sql drop customers;
	
	exec sql disconnect;
	
	fprintf(stderr,”could not create customers table\n”);
	
	return -1;

}

如果customers表在执行过程中出现了问题,没有人为干预,则该程序“Exec sql drop customers;”语句将被执行的次数为无限。

解析:如果customers表在执行过程中出现问题,程序将跳转到handle_error标签并执行其中的代码。在handle_error标签中,程序会执行"exec sql drop customers"语句,然后再次跳转回handle_error标签。这样会导致无限循环执行该语句,因为每次执行后仍然会出现问题导致再次跳转到handle_error标签。所以,“exec sql drop customers;”语句将被执行的次数为无限次。

附录 C With MySQL

当使用C语言和MySQL进行联合处理时,通常会使用MySQL提供的C API(MySQL C API)来与数据库进行交互。通过这个API,可以在C语言中执行查询、获取结果集、插入记录等操作。

下面是一个简单的示例代码,演示如何使用C语言和MySQL进行联合处理:

#include <stdio.h>
#include <mysql/mysql.h>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    conn = mysql_init(NULL);
    if (conn == NULL) {
        fprintf(stderr, "mysql_init() failed\n");
        return 1;
    }

    if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) {
        fprintf(stderr, "mysql_real_connect() failed\n");
        mysql_close(conn);
        return 1;
    }

    if (mysql_query(conn, "SELECT * FROM table")) {
        fprintf(stderr, "mysql_query() failed\n");
        mysql_close(conn);
        return 1;
    }

    res = mysql_store_result(conn);
    if (res == NULL) {
        fprintf(stderr, "mysql_store_result() failed\n");
        mysql_close(conn);
        return 1;
    }

    while ((row = mysql_fetch_row(res))) {
        printf("%s\n", row[0]);
    }

    mysql_free_result(res);
    mysql_close(conn);

    return 0;
}

在上面的代码中,我们首先初始化了一个MySQL连接,然后连接到指定的数据库,执行了一个SELECT查询,并打印查询结果中的第一列数据。

关于MySQL C API的更多信息和文档,你可以参考MySQL官方网站:https://dev.mysql.com/doc/c-api/en/。