Linux下C语言结合数据库编程.pdf
《Linux下C语言结合数据库编程.pdf》由会员分享,可在线阅读,更多相关《Linux下C语言结合数据库编程.pdf(172页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 一、一、.3 ESQL/C资料资料1.1.3 第一节 什么是嵌入SQL语言?1.1.1.3 嵌入SQL程序的组成元素1.1.2.5 什么是静态SQL和动态SQL?1.1.3.5 什么是SQLCA?1.1.4.5 什么是SQLDA?1.2.5 第二节 SYBASE SQL Server嵌入式SQL语言1.2.1.5 一个嵌入SQL语言的简单例子1.2.2.7 嵌入SQL的处理过程1.2.3.7 嵌入SQL语句总览1.2.4.20 动态SQL语句1.2.5.30 两个例子程序1.3.42 第三节 IBM DB2 嵌入SQL语言1.3.1.42 一个简单示例1.3.2.45 嵌入SQL语句1.3.
2、3.57 DB2 的嵌入SQL程序处理过程1.3.4.62 DB2 的动态SQL嵌入语句1.4.82 第四节 ORACLE数据库的嵌入SQL语言1.4.1.82 基本的SQL语句1.4.2.87 嵌入PL/SQL1.4.3.88 动态SQL语句1.5.107 第五节INFORMIX的嵌入SQL/C语言1.5.1.107 一个简单的入门例子1.5.2.109 宿主变量1.5.3.114 嵌入SQL的处理过程1.5.4.115 动态SQL语言1.6.127 第六节Microsoft SQL Server7 嵌入式SQL语言1.6.1.127 一个嵌入SQL语言的简单例子1.6.2.128 嵌入SQ
3、L的处理过程1.6.3.132 嵌入SQL语句1.6.4.140 动态SQL语句1.6.5.151 API二、二、.152 ESQL编程使用说明编程使用说明2.1.152 第一章 ESQL介绍2.1.1.153 ESQL中的基本概念2.1.2.153 ESQL程序的组成和运行2.2.154 第二章 ESQL 程序的基本结构2.2.1.154 程序首部 1 22.2.2.155 程序体2.3.159 第三章 查 询2.3.1.159 SELECT 语句2.3.2.161 游标的使用2.3.3.163 定位修改和删除语句2.4.166 第四章 提交/回滚事务2.4.1.166 逻辑工作单元2.4.
4、2.167 COMMIT 语句2.4.3.167 ROLLBACK语 句2.4.4.167 DISCONNECT 语句2.5.167 第五章 错误检测和恢复2.5.1.168 USERCA的结构2.6.169 第六章 使用说明书2.6.1.169 启动Cobase:2.6.2.169 退出Cobase:2.6.3.170 交互式SQL(Interactive SQL)访问2.6.4.170 嵌入式SQL(Enbeded SQL)编程方式2.6.5.171 补充说明 一、ESQL/C资料 一、ESQL/C资料 1.1第一节 什么是嵌入SQL语言?1.1第一节 什么是嵌入SQL语言?SQL 是一种
5、双重式语言,它既是一种用于查询和更新的交互式数据库语言,又是一种应用程序进行数据库访问时所采取的编程式数据库语言。SQL 语言在这两种方式中的大部分语法是相同的。在编写访问数据库的程序时,必须从普通的编程语言开始(如 C 语言),再把SQL 加入到程序中。所以,嵌入式 SQL 语言就是将 SQL 语句直接嵌入到程序的源代码中,与其他程序设计语言语句混合。专用的 SQL 预编译程序将嵌入的 SQL 语句转换为能被程序设计语言(如 C 语言)的编译器识别的函数调用。然后,C 编译器编译源代码为可执行程序。各个数据库厂商都采用嵌入 SQL 语言,并且都符合 ANSI/ISO 的标准。所以,如果采用合
6、适的嵌入 SQL 语言,那么可以使得你的程序能够在各个数据库平台上执行(即:源程序不用做修改,只需要用相应数据库产品的预编译器编译即可)。当然,每个数据库厂商又扩展了 ANSI/ISO 的标准,提供了一些附加的功能。这样,也使得每个数据库产品在嵌入 SQL 方面有一些区别。本章的目标是,对所有的数据库产品的嵌入 SQL 做一个简单、实用的介绍。当然,嵌入 SQL 语句完成的功能也可以通过应用程序接口(API)实现。通过 API 的调用,可以将 SQL 语句传递到 DBMS,并用 API 调用返回查询结果。这个方法不需要专用的预编译程序。1.1.11.1.1 嵌入SQL程序的组成元素 嵌入SQL
7、程序的组成元素 我们以 IBM 的 DB2 嵌入 SQL 为例,来看看嵌入 SQL 语句的组成元素。例 1、连接到 SAMPLE 数据库,查询 LASTNAME 为 JOHNSON 的 FIRSTNAME 信息。3#include#include#include#include util.h#include EXEC SQL INCLUDE SQLCA;(1)main()EXEC SQL BEGIN DECLARE SECTION;(2)char firstname13;char userid9;char passwd19;EXEC SQL END DECLARE SECTION;EXEC S
8、QL CONNECT TO sample;(3)EXEC SQL SELECT FIRSTNME INTO:firstname(4)FROM employee WHERE LASTNAME=JOHNSON;(4)printf(First name=%sn,firstname);EXEC SQL CONNECT RESET;(5)return 0;上面是一个简单的静态嵌入 SQL 语句的应用程序。它包括了嵌入 SQL 的主要部分:(1)中的 include SQLCA 语句定义并描述了 SQLCA 的结构。SQLCA 用于应用程序和数据库之间的通讯,其中的 SQLCODE 返回 SQL 语句执行
9、后的结果状态。(2)在 BEGIN DECLARE SECTION 和 END DECLARE SECTION 之间定义了宿主变量。宿主变量可被 SQL 语句引用,也可以被 C 语言语句引用。它用于将程序中的数据通过SQL 语句传给数据库管理器,或从数据库管理器接收查询的结果。在 SQL 语句中,主变量前均有“:”标志以示区别。(3)在每次访问数据库之前必须做 CONNECT 操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。(4)是一条选择语句。它将表 employee 中的 LASTNAME 为“JOHNSON”的行数据的FIRSTNAME 查出,并将它放在 firstnam
10、e 变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含 update、insert 和 delete 语句。(5)最后断开数据库的连接。从上例看出,每条嵌入式 SQL 语句都用 EXEC SQL 开始,表明它是一条 SQL 语句。这也是告诉预编译器在 EXEC SQL 和“;”之间是嵌入 SQL 语句。如果一条嵌入式 SQL 语句占用多行,在 C 程序中可以用续行符“”。4 1.1.21.1.2 什么是静态SQL和动态SQL?什么是静态SQL和动态SQL?嵌入 SQL 语言,分为静态 SQL 语言和动态语言两类。静态 SQL 语言,就是在编译时已经确定了引用的表和列。宿主变
11、量不改变表和列信息。可以使用主变量改变查询参数值,但是不能用主变量代替表名或列名。动态 SQL 语言就是:不在编译时确定 SQL 的表和列,而是让程序在运行时提供,并将SQL 语句文本传给 DBMS 执行。静态 SQL 语句在编译时已经生成执行计划。而动态 SQL 语句,只有在执行时才产生执行计划。动态 SQL 语句首先执行 PREPARE 语句要求 DBMS 分析、确认和优化语句,并为其生成执行计划。DBMS 还设置 SQLCODE 以表明语句中发现的错误。当程序执行完“PREPARE”语句后,就可以用 EXECUTE 语句执行执行计划,并设置 SQLCODE,以表明完成状态。1.1.31.
12、1.3 什么是SQLCA?什么是SQLCA?应用程序执行时,每执行一条 SQL 语句,就返回一个状态符和一些附加信息。这些信息反映了 SQL 语句的执行情况,它有助于用户分析应用程序的错误所在。这些信息都存放在sqlca.h 的 sqlca 结构中。如果一个源文件中包含 SQL 语句,则必须要在源程序中定义一个SQLCA 结构,而且名为 SQLCA。最简单的定义方法是在源文件中加入一些语句:EXEC SQL INCLUDE sqlca.h。每个数据库产品都提供了 SQLCA 结构。1.1.41.1.4 什么是SQLDA?什么是SQLDA?我们知道,动态 SQL 语句在编译时可能不知道有多少列信
13、息。在嵌入 SQL 语句中,这些不确定的数据是通过 SQLDA 完成的。SQLDA 的结构非常灵活,在该结构的固定部分,指明了多少列等信息,在该结构的后面有一个可变长的结构,说明每列的信息。在从数据库获得数据时,就可以采用 SQLDA 来获得每行的数据。各个数据库产品的 SQLDA 结构都不完全相同。1.21.2 第二节 SYBASE SQL Server嵌入式SQL语言 第二节 SYBASE SQL Server嵌入式SQL语言 1.2.11.2.1 一个嵌入SQL语言的简单例子 一个嵌入SQL语言的简单例子 我们首先来看一个简单的嵌入式 SQL 语言的程序(C 语言):用 sa(口令为 p
14、assword)连接数据库服务器,并将所有书的价格增加 10%。这个例子程序如下:例 1、5/*建立通讯区域*/Exec sql include sqlca;main()/*声明宿主变量*/EXEC SQL BEGIN DECLARE SECTION;char user30,passwd30;EXEC SQL END DECLARE SECTION;/*错误处理*/EXEC SQL WHENEVER SQLERROR CALL err_p();/*连接到 SQL SERVER 服务器*/printf(nplease enter your userid);gets(user);printf(np
15、assword);gets(passwd);exec sql connect:user identified by:passwd;exec sql use pubs2;EXEC SQL update titles set price=price*1.10;EXEC SQL commit work;/*断开数据库服务器的连接*/Exec sql disconnect all;return(0);/*错误处理程序*/err_p()printf(nError occurred:code%d.n%s,sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);从上面这个例子,我们看出嵌
16、入 SQL 的基本特点是:1、每条嵌入式 SQL 语句都用 EXEC SQL 开始,表明它是一条 SQL 语句。这也是告诉预编译器在 EXEC SQL 和“;”之间是嵌入 SQL 语句。2、如果一条嵌入式 SQL 语句占用多行,在 C 程序中可以用续行符“”,在 Fortran中必须有续行符。其他语言也有相应规定。3、每一条嵌入 SQL 语句都有结束符号,如:在 C 中是“;”。4、嵌入 SQL 语句的关键字不区分大小写。5、可以使用“/*.*/”来添加注释。也可以使用“-”来添加注释。6 1.2.21.2.2 嵌入SQL的处理过程 嵌入SQL的处理过程 嵌入 SQL 的处理过程如下图所示:图
17、 6-1 SYBASE SQL SERVER 嵌入 SQL 程序处理过程 嵌入 SQL 程序的后缀为.cp。嵌入 SQL 处理的第一步是预编译。预编译器(cpre.exe)处理过程分为两个小步:第一小步:语法分析。检查嵌入 SQL 语句的语法正确性。第二小步:增加一些预编译器变量,并注释了所有的嵌入的 SQL 语句,将嵌入 SQL 语句转换为对 client-library 中函数的调用(注意:在连接时,编译后的代码需要使用client-library 中的库文件)。如果在编译时,设置一些选项,则生成存储过程。预编译后可能产生 3 个文件:一个 C 文件(肯定产生),一个列表文件(需要在编译时
18、设置选项,才能产生)和一个 isql 脚本文件(需要在编译时设置选项,才能产生)。列表文件包含了输入文件的源语句和一些警告信息和错误信息。Isql 脚本文件包含了预编译器产生的存储过程脚本文件。这个存储过程是用 T-SQL 写的。总之,预编译器的处理方法是,注释了嵌入的 SQL 语句,用一些特定的函数代替。第二步是 C 源程序的编译和链接。cl 是编译和链接命令的集成命令,编译的结果是产生.obj,在链接时,将 C 的系统库和 SQL Server 提供的库文件同目标文件连接在一起。最后生成.exe。也可以使用 SET LIB 语句设置库文件的环境信息。1.2.31.2.3 嵌入SQL语句总览
19、 嵌入SQL语句总览 除了 print、readtext 和 writetext 外,大多数的 Transact-SQL 语句都可以在嵌入 SQL中使用。嵌入 SQL 语句的语法为:“exec sql at connection_name sql_statement;”。那么,你可以用 Transact-SQL 语句来替代 sql_statement 就可以完成嵌入 SQL 的编写。(同T-SQL 相比,嵌入 SQL 提供了:自动数据类型转换、动态 SQL、SQLCA 数据结构等功能。)但是,也有一些嵌入式 SQL 所特有的语句,有些嵌入式 SQL 语句的名字同 Transact-SQL语句相
20、同,但是语句的语法有所不同。嵌入 SQL 语句应该包含五个步骤:1)、通过 SQLCA 建立应用程序和 SQL SERVER 的 SQL 通信区域。2)、声明宿主变量。3)、连接到 SQL SERVER。4)、通过 SQL 语句操作数据。5)、处理错误和结果信息。嵌入式 SQL 语句分为静态 SQL 语句和动态 SQL 语句两类。下面我们按照功能讲解这些语句。本节讲解静态 SQL 语句的作用。动态 SQL 语句将在下一节讲解。同动态 SQL 相关的一些语句也在下一节中讲解。7 1.2.3.11.2.3.1 宿主变量 1)、声明方法 宿主变量 1)、声明方法 宿主变量(host variable
21、)就是在嵌入式 SQL 语句中引用主语言说明的程序变量(如例中的 user31变量)。如:EXEC SQL BEGIN DECLARE SECTION;char user31,passwd31;EXEC SQL END DECLARE SECTION;exec sql connect:user identified by:passwd;.在嵌入式 SQL 语句中使用主变量前,必须采用 BEGIN DECLARE SECTION 和 END DECLARE SECTION 之间给主变量说明。这两条语句不是可执行语句,而是预编译程序的说明。主变量是标准的 C 程序变量。嵌入 SQL 语句使用主变量
22、来输入数据和输出数据。C 程序和嵌入 SQL语句都可以访问主变量。另外,在定义宿主变量时也可以使用 client-library 定义的数据类型,如:CS_CHAR。这些定义存放在 cspublic.h 文件中。如:EXEC SQL BEGIN DECLARE SECTION;CS_CHAR user30,passwd30;EXEC SQL END DECLARE SECTION;client-library 定义的数据类型共有:CS_BINARY、CS_BIT、CS_BOOL、CS_CHAR、CS_DATETIME、CS_DATETIME4、CS_DECIMAL、CS_FLOAT、CS_RE
23、AL、CS_IMAGE、CS_INT、CS_MONEY、CS_MONEY4、CS_NUMERIC、CS_RETCODE、CS_SMALLINT、CS_TEXT、CS_TINYINT、CS_VARBINARY、CS_VARCHAR、CS_VOID。为了便于识别主变量,当嵌入式 SQL 语句中出现主变量时,必须在变量名称前标上冒号(:)。冒号的作用是,告诉预编译器,这是个主变量而不是表名或列名。不能在声明时,初始化数组变量。由上可知,SYBASE SQL SERVER 使用宿主变量传递数据库中的数据和状态信息到应用程序,应用程序也通过宿主变量传递数据到 SYBASE 数据库。根据上面两种功能,宿主
24、变量分为输出宿主变量和输入宿主变量。在 SELECT INTO 和 FETCH 语句之后的宿主变量称作“输出宿主变量”,这是因为从数据库传递列数据到应用程序。如:exec sql begin declare section;CS_CHAR id5;exec sql end declare section;exec sql select title_id into:id from titles where pub_id=0736 and type=business;除了 SELECT INTO 和 FETCH 语句外的其他 SQL 语句(如:INSERT、UPDATE 等语句)中的宿主变量,称为
25、“输入宿主变量”。这是因为从应用程序向数据库输入值。如:exec sql begin declare section;CS_CHAR id7;CS_CHAR publisher5;8 exec sql end declare section;.exec sql delete from titles where title_id=:id;exec sql update titles set pub_id=:publisher where title_id=:id;另外,也可以通过宿主变量获得存储过程的执行状态信息。如:exec sql begin declare section;CS_SMALL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 语言 结合 数据库 编程
限制150内