




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、informix笔记第一章 Informix介绍Informix提供了为开放系统开发和实现信息管理应用的先进产品。核心产品包括应用开发和应用工具,数据库服务器以及中间件。所有的产品都基于ANSI标准的SQL。INFORMIX-OnLine:快速容错服务器,可以进行联机事务处理方面的应用; INFORMIX-OnLine是Informix的高性能、容错的、OLTP数据库服务器。OnLine允许在数据库的字段中存放和使用二进制大对象(BLOBs),从而扩展了数据处理使之可以处理多媒体信息。它还允许分布式数据库应用。INFORMIX-SE:低维护服务器,适用于中、小规模的应用环境;INFORMIX-
2、SE服务器适用于需要多用户的数据库服务器的环境,但是高的可用性(availability)和OLTP级别的性能不是关键。它适用的环境是多用户共享数据库,运行中、小规模的应用。INFORMIX-SE基于事实上的工业标准的UNIX的文件访问方法,即Informix C-ISAM。Informix产品使用双进程体系结构,它把用户的前端应用代码和后端数据库服务器隔离。应用开发工具或客户端,提供构建和运行应用程序的用户接口。数据库服务器,进行所有的数据处理工作,包括数据的存储和检索。工业标准SQL用于传送从客户端应用到Informix服务器的数据请求。在双进程体系结构中,客户机和服务器可以位于同一台机器
3、上或是通过网络相连接的不同的机器上。当两个进程运行于不同的机器上时,称之为客户机/服务器体系结构。上图表示Informix产品如何构成双进程体系结构。客户机/服务器的体系结构有几个优点:l 性能隔离前端和后端进程,使得可以为特定的任务来优化软、硬件。l 灵活性使用双进程体系结构,前端开发工具可以适用于不同的Informix服务器。这样做,可以使用户选择最适合于自己的应用环境的服务器。从长远的观点来看,开放式的体系结构使得来自于不同厂商的前端开发工具和服务器可以协同工作。l 节省费用可以选择适合于应用程序规模的硬件,从而达到最优的性能/价格比。l 可移植性应用程序易于移植到不同的机器上。第二章I
4、NFORMIX-ESQL/C简介INFORMIX-ESQL/C是一个应用开发工具,它使得构建应用程序的C程序员拥有一个访问Informix数据库的接口。开发人员使用库、头文件和预编译器来直接在C程序中嵌入SQL语句。INFORMIX-ESQL/C具有众多的组织成库形式的例程来帮助用户l 使用所有的SQL数据类型l 解释状态消息l 使用Informix子进程INFORMIX-ESQL/C有时简称为ESQL/C在使用ESQL/C之前,必须设置好下面的环境变量:INFORMIXDIRINFORMIX- ESQL/C所位于的目录PATH执行程序的搜索路径用户可以在系统提示符下或在.profile( B
5、 shell )文件或 .login( C shell )文件中设置这些变量。如果是在系统提示符下设置环境变量,则用户每次登录时要重新设置它们。如果是在 .profile或 .login文件中设置,则用户每次登录时,环境变量会自动被设置。使用Bourne shell时,设置环境变量如下:INFORMIXDIR=usr/informix/; export INFORMIXDIRPATH=$INFORMIXDIR/bin:$PATH; exportPATH使用C shell时,设置如下:setenv INFORMIXDIR /usr/informixsetenv PATH $INFORMIXDIR
6、/bin:$PATH当用户运行INFORMIX-OnLine时,还应当把环境变量SQLEXEC设置为$INFORMIXDIR/lib/sqlturbo,把环境变量TBCONFIG设置为合适的值。运行INFORMIX-NET、INFORMIX-STAR或INFORMIX-OnLine时,可能还有其它的环境变量需要设置。ESQL/C预处理器ESQL/C的一个主要部件就是它的预处理器。预处理器在把C的源代码送给C编译器处理之前,把ESQL/C代码转换成C代码。预处理命令从命令行启动,启动时可以有各种不同的参数来说明源文件、预期的结果文件,等等。ESQL/C预处理器将在其它章节里详细讨论。在本培训手册
7、中,预处理器的名字为esql。ESQL/C带了一个示例数据库stores5,该数据库中存放的是一个虚构的运动器材批发商有关的信息。当示例数据库被创建时,使用ESQL/C的示例源代码也随之被创建。在练习使用ESQL/C之前,用户应当建立自己的stores5数据库的拷贝。1.创建一个子目录,用来存放ESQL/C的例子源文件,输入如下:%mkdir demo%cd demo确信DbName是唯一的。2.现在,输入下面的命令(输入时,把DbName替换成你所使用的stores5数据库名):%esqldemo5 DbName当用户使用自己的stores5数据库拷贝时,可以进行任意的修改。如果用户想刷新数
8、据库拷贝,只要再次运行esqldemo5,将删除现有的数据库拷贝,并按初始的情形下创建一个新的数据库拷贝。Informix产品提供了一个示例数据库stores5,用户可以在系统提示符下输入dbaccessdemo5来创建该数据库。附注用户可以输入dbaccessdemo5 name,以其它的名字来创建stores5数据库系统提供的几种数据类型如下:CHAR存放字母、数字和符号的任意组合。NUMBER存放五种数值数据类型中的某种数值。SERIAL存放由INFORMIX-SQL赋值的连续的整数。DATE存放日期。MONEY存放现金数额。DATE-TIME存放日期和时间。INTERVAL存放表示一段
9、时间的值。VARCHAR存放可变长度的字符数据,仅使用必须的磁盘空间。TEXT一种二进制大对象(BLOB),实际上它可以存放任何种类的文本数据。TEXT字段通常存放备忘录、手稿、商业文档,等等。BYTE一种二进制大对象(BLOB),它以一种无区分的字节流形式来存放任意种类的二进制数据,通常是保存的电子表格、程序的装载模块、数字化的声音模板,等等。附注:VARCHAR、TEXT和BYTE数据类型仅在使用INFORMIX-OnLine时才有。要获取同数据类型有关的更多的信息,请查阅The Informix Guide to SQL:Reference。第三章在INFORMIX-ESQL/C程序中嵌
10、入SQL语句在C程序中嵌入SQL语句时,要记住下面的规则:l 为预编译器指明SQL语句在SQL语句之前用美元符号($)或ANSI的标准关键字EXEC SQL来标明。尽管用户可以在C代码中混用这两种标注方法,但是,为了便于维护,一般不推荐这样做。另外,不要忘记在SQL语句的最后加上分号( ; )。l SQL语句可以有变量,变量可以出现在交互式SQL语句中常数可以出现的任何位置。这种在可执行的SQL语句中的变量称为宿主变量(host variable),将在后面讨论它。l 可以在能够使用C的可执行语句的任何地方使用可执行的SQL语句。宿主变量,即是C语言中的普通变量,它们可以出现在交互式SQL语句
11、中常数所在的任何位置上。当在SQL语句中使用宿主变量时,必须把它们同SQL语句中的名称相区分,这样做使得预编译器能够识别出哪些标识符是宿主变量。为从嵌入式的SQL语句中区分出宿主变量,给宿主变量加上美元符号($)作前缀。如果用户愿意的话,也可以使用ANSI标准中规定的分号( : )来作前缀。(在本手册中,我们将使用美元符号来作标识。)这里是一些例子:l UPDATE语句中的SET子句,如$update stock set unit_price = $NewPriceLd;l INSERT语句中的VALUES子句,如$insert into stock values( $StockG_t );l
12、 UPDATE、DELETE和SELECT语句中的WHERE子句,例如:$update stock .where manu_code = $MfcodeLc;$delete from orders where order_num = $OrdNoLl;宿主变量是普通的C变量。既然它们是普通的C变量,必须把它们说明和定义成某种类型,就象任何别的C变量一样。宿主变量可以定义为这些类型中的任何一种l 简单类型象integer, double, 等等。l 结构l 数组象其它的C变量一样,可以在定义宿主变量的时候初始化它们。但是,因为ESQL/C预编译器要在编译SQL语句之前知道宿主变量的存在和类型,所
13、以必须为预编译器标明宿主变量的定义。可以使用美元符号($)作为定义的前缀来为预编译器标明宿主变量的定义,或者,把定义部分用下面这对语句括起来EXEC SQL BEGIN DECLARE SECTIONEXEC SQL END DECLARE SECTION关于宿主变量和它们的引用有几点其它因素需要考虑。宿主变量和SQL数据库对象(数据库、表、字段、约束、过程,等等)可以同名,即使是在同一个SQL语句中。例如,下面的语句是正确的$update customer set zipcode = $zipcodewhere customer_num = $customer_num;esql预编译器区分字
14、母的大小写,即对字母的大小写敏感。例如,下面的两个宿主变量是不同的,它们访问的是不同的内存$char manuCodeC44;$char manucodec44最后,任何使用$为前缀来定义的变量都可以在标准的C表达式中使用。例如,下面的gets()对宿主变量的引用是合法的$char DBNameC1111;gets(DBNameC11);$database $DBNameC11;当SQL语句之外使用宿主变量时,不能以$为前缀来引用,否则,C编译器编译时报错。当数据从数据库中取出,送到一个ESQL/C应用程序时,取得的数据应存放到与SQL数据类型兼容的数据类型中。同样,当数据从应用程序存放到数据
15、库中时,数据类型也应当兼容。如果用户没有说明兼容的宿主变量类型,有些情形可以进行自动的类型转换;如果无法转换,则返回一个错误信息。当接收数据区太小时,如果丢失的是有效数字,则返回错误,如果是字符,则返回警告信息。检测和处理这些错误和警告将在其它的章节中讨论。上图列出了SQL数据类型和它们对应的C的宿主变量类型。CHAR、SMALLINT、INTEGER、SMALLFLOAT、FLOAT、SERIAL和DATE这些SQL数据类型都有相对应的C的数据类型。但是,DECIMAL、MONEY、DATETIME、INTERVAL和VARCHAR必须定义特别的ESQL/C数据类型来与之相对应。后续的章节将
16、全面地描述这些数据类型。ESQL/C在宿主变量定义时支持类似C的typedef表达式,如上面所示。但是,它们必须以$符号为前缀,ESQL/C不处理没有$符号为前缀的typedef语句。在上面的例子中,$typedef创建了一个SMALLINT类型来作为短整型(short int)使用,然后再定义一个StockNumLs变量,类型为SMALLINT。本例用同样的方法定义了长整型(long int)的等价的SQL数据类型DATE。不能使用$typedef来把多维数组或联合(union)定义成宿主变量类型。使用C的typedef表达式时要小心,因为esql不会展开它们。可以把结构定义为INFORMI
17、X-ESQL/C的宿主对象。上例把stock_t定义为一个结构模板,然后,使用该模板定义了两个结构变量StockG_t和ItemG_t。可以使用嵌套的结构。在可执行的SQL语句中,可以把结构作为一个整体来使用或引用它的任一部分。当把结构作为整体来使用时,INFORMIX ESQL/C预编译器把结构的引用展开成对它的各个部分的引用的列表。例如:$insert into stock(stock_num, manu_code)values($StockG_t);等价于$insert into stock(stock_num, manu_code)values($StockG_t.StockNumS,
18、$StockG_t.ManuCodeC);可以把数组定义为INFORMIX-ESQL/C的宿主对象。上例把BufLapc定义为一个字符指针的数组,而且,它还把UnitSal定义为一个长整型的数组。在定义数组时,必须使用一个整形值来说明数组的大小。在可执行SQL语句中,可以l 引用数组的任何一个元素。l 对于CHAR类型的数组,可以仅引用数组名。l 对于其它类型的数组,不能仅引用数组名。在定义宿主变量时,可以使用普通的C的初始化表达式来进行初始化。但是,对于字符类型的表达式有一个例外:字符串不能有l 分号INFORMIX-ESQL/C的关键字预编译器不检查C语法的正确性;它只是把初始化表达式传递
19、给C编译器,由C编译器来检查这类错误。有关宿主变量的作用域范围的规定同一般的C变量一样。l 宿主变量是automatic(局部的),除非显式地定义为external或static。l 在一个函数中定义的宿主变量对于该函数来说是局部的。l 函数中的局部宿主变量使得定义在函数外部的同名的变量不可见。l 在同一个模块中不能多次定义同一个宿主变量。为确保局部宿主变量对于它所定义的块(block)来说是局部的,使用一对组合的符号 $ 和 $ 来开始和结束块。ANSI标准不支持 $ 和 $ ,在5.0版中可以使用简单的括弧对, 和 。块最多可以嵌套16层。INFORMIX-ESQL/C提供了许多的头文件。
20、(参见上面的列表。)这些文件中定义了许多对象,用户的程序可能会用到它们。这些文件位于$INFORMIXDIR目录的子目录incl/esql下。每一个头文件将在后续的合适的章节讨论。可以在程序中包含进一个或多个头文件来简化编程,例如,下面这条语句包含进sqlca头文件不要使用include$include sqlca;在程序中包含进sqlca头文件,可以发现诸如数据库服务器执行SQL语句是否成功,等等。当预编译器看到$include,它将读入文件sqlca.h,并把它插入到用户的代码中。在后续某章中,你将看到如何使用该头文件中的一些结构来检测SQL语句的执行状态。$include在其它章节中讨论
21、。在访问数据库表和给表添加记录之前,必须激活表所在的数据库。为激活一个数据库使它成为当前打开的数据库,使用DATABASE语句DATABASE必需的关键字DatabaseName想要选择的数据库的名字DatabaseName可以是一个指明数据库的标识符、一个存有数据库名字的字符串或指向这样的一个字符串的指针。当为INFORMIX-SE说明数据库时,如果该数据库既不在当前目录也不在DBPATH环境变量所说明的目录,则必须在DATABASE关键字之后跟上一个字符串常数或一个宿主变量,该变量存放的是数据库的完整路径名(不包括.dbs后缀)。使用CLOSE DATABASE语句来关闭当前的数据库。CL
22、OSE DATABASE是必需的关键字在头一个例子中stores是数据库名。如果使用的是INFORMIX-OnLine,则该数据库在由环境变量TBCONFIG指明的OnLine的当前实例中。如果使用的是INFORMIX-SE,则该数据库位于当前目录或DBPATH环境变量中存放的目录。在第二个例子中,stores5是数据库名。该数据库既不在当前目录也无法通过DBPATH环境变量来访问。宿主变量DbNameLc80中存放的是数据库的完整路径,路径由stcopy函数拷贝到变量中。尽管可以这样做,但是,在程序中通过编程来获取一个完整的路径名并不是一个好的作法。-第四章编译INFORMIX-ESQL/C
23、程序当使用INFORMIX-ESQL/C预编译器来预处理源文件时,它把所标明的SQL语句转换成C的代码。当然,要使用$符号作前缀或用EXEC SQL关键字把SQL语句包括起来,给预编译器指明SQL语句的存在。INFORMIX-ESQL/C仅当源文件具有“.ec”后缀时才作这类的转换。INFORMIX-ESQL/C把编译结果存放到与源文件同名但后缀是“.c”的一个文件中。例如,预编译myfile.ec产生文件myfile.c,源文件内容myfile.ec不变。INFORMIX-ESQL/C有取舍地把新产生的C代码送给C编译器处理。-用户可以在自己的程序中包含进其它的源文件。例如,你或许想把所有的全局变量的定义放到一个源文件中,然后,通过一个预编译指令把它们自动包含进来。如果该源文件不包含有SQL语句,则可以使用标准的C的预编译语句#inclu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年核燃料元件及组件合作协议书
- 2025年月桂醇聚醚磷酸钾合作协议书
- 线上线下智慧购物商城合作框架协议
- 供应链金融服务协议及相关风险控制条款说明
- 员工薪资及奖金详细收入证明(6篇)
- 保险服务协议书
- 行政管理本科试题及答案指南
- 个人电脑硬件维修维护服务协议
- 餐厅卫生与服务协议书
- 社区农村环境综合治理合同书
- 石家庄晨强塑料制品有限公司年产2000吨PVC塑料管项目环境影响评价报告表
- MOOC 光纤光学-华中科技大学 中国大学慕课答案
- 企业文化智慧树知到期末考试答案2024年
- 数字贸易学 课件 第3章 消费互联网、产业互联网与工业互联网
- 第11课+宋元时期的经济、科技与文化【中职专用】《中国历史》(高教版2023基础模块)
- 17.第8课第一框课件《我国的国体与政体》
- 大学英语六级词汇表(打印版)
- 我的偶像赵丽颖
- JTG D60-2015 公路桥涵设计通用规范
- Unit8GreenLiving单元教学设计高中英语北师大版
- 篮球竞赛组织编排
评论
0/150
提交评论