pro_c_c++编译过程.ppt_第1页
pro_c_c++编译过程.ppt_第2页
pro_c_c++编译过程.ppt_第3页
pro_c_c++编译过程.ppt_第4页
pro_c_c++编译过程.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Xuzhou Institute of Technology,1,Pro *c/c+学习,1、编译过程 2、知识点总结,Xuzhou Institute of Technology,2,开发Pro *c/c+应用程序步骤,1、编写PC源程序:内嵌SQL和PL/SQL 2、预编译PC源程序:内嵌SQL语句-SQLLIB 3、编译转换后的源程序:生成目标代码 4、链接目标代码和SQLLIB:生成可执行代码 5、运行应用程序,Xuzhou Institute of Technology,3,预编译工具proc,预编译语法: ProcOPTION_NAME=value OPTION_NAME=valu

2、e . 其中: OPTION_NAME用于指定预编译选项 value用于指定选项值,Xuzhou Institute of Technology,4,预编译的三种方法,1、命令行直接指定预编译选项 2、使用系统配置文件pcscfg.cfg 3、使用用户配置文件user.cfg,Xuzhou Institute of Technology,5,1 命令行直接指定预编译选项,必须的3个选项: 1、iname:指定PC源程序文件名 2、parse:指定解析方法 3、include:指定头文件位置。,Xuzhou Institute of Technology,6,命令行预编译示例,如在visual

3、c+ 6.0环境下: Proc iname=d:demodemo1.pc parse=full include=%ORACLE_HOME%precomppublic include=“c:program filesmicrosoft visual studioVC98include” 编译完成后,变为demo1.c或demo1.cpp,Xuzhou Institute of Technology,7,2 使用系统配置文件预编译,Pcscfg.cfg用于存放常用的预编译选项及设置: 位于%ORACLE_HOME%precompadmin目录 包括:iname、include、parse等选项,X

4、uzhou Institute of Technology,8,Pcscfg.cfg示例,Define=(WIN32_LEAN_AND_MEAN) Parse=full Include=%oracle_home%precomppublic Include=%oracle_home%ociinclude Include=c:program filesmicrosoft visual studioVC98include,此时直接预编译: Proc iname=d:deomdemo1.pc,Xuzhou Institute of Technology,9,3 使用用户配置文件预编译,User.cfg

5、示例: Define=(WIN32_LEAN_AND_MEAN) Parse=full Include=%oracle_home%precomppublic Include=c:program filesmicrosoft visual studioVC98include,命令行预编译: Proc iname=d:deomdemo1.pc Config=d:demouser.cfg,Xuzhou Institute of Technology,10,工程文件及生成可执行程序,1、设置头文件路径(visual c+ 6.0): 追加sqlca.h所在的路径: %oracle_home%preco

6、mppublic 若开发LOB对象应用等程序时,还要加入oci.h: %oracle_home%ociinclude,Xuzhou Institute of Technology,11,工程文件及生成可执行程序 con,2、建立工程文件 如win32 console application等 3、工程中增加c/c+程序和库文件 如SQLLIB库文件orasql92.lib,位于%oracle_home%precomplib 4、建立并运行可执行程序,Xuzhou Institute of Technology,12,关于OTT和OCI,OTT(Object Type Transtator):对

7、象类型转换工具 OCI(Oracle Call Interface ):调用接口 都是C/C+访问数据库的手段,程序效率大大提高。 Pro*C/C+:内嵌SQL,预编译后把内嵌SQL处理为ORACLE标准运行库的调用,然后再象编译一般的C/C+程序一样进行编译、连接、运行。 1.proc XXX.pc 2.gcc/g+ XXX.c -lclntsh 2的方法包含了一些C/C+访问ORACLE的API,比较繁琐,但是完全符合C/C+语言的访问流程,清晰,便于理解,调试。 OCI效率极高,功能强大,不过实现不太容易 occi 学起来应该不难,基本上和c+ 没什么区别,可以考虑。,Xuzhou In

8、stitute of Technology,13,关于客户端访问ORACLE数据库 Net Configuration Assiant,需要配置网络服务名: 步骤如下: 1、本地Net服务名配置:选择“添加” 2、服务名:全局数据库名 3、协议选择:TCP 4、监听程序所在的主机名或IP及端口号。 5、进行测试 6、指定网络服务名 如命令行下:sqlplus scott/tigerdemo,Xuzhou Institute of Technology,14,简单的示例程序,#include #include #include #include Void main() Char username

9、10,password10,server10; Char name11,title10; Float salary; Printf(“输入用户名:”); Gets(username); Printf(“输入口令:”); Gets(password); Printf(“输入输入网络服务名:”); Gets(server); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server; Printf(“输入雇员名:”); Gets(name); EXEC SQL SELECT sal,job INTO :salary, :tit

10、le FROM emp WHERE UPPER(ename)=UPPER(:name); Printf(“岗位:%s,工资:%6-2fn”,title,salary); EXEC SQL COMMIT RELEASE; ,Xuzhou Institute of Technology,15,2 Pro *c/c+知识点总结,1、注释符 单行注释:- 编写支持C+的PC程序:/ 多行注释:/*.*/ 2、定义部分 主要用于定义宿主变量、指示变量和储存过程、函数等。,Xuzhou Institute of Technology,16,2 Pro *c/c+知识点总结CON,3、分隔符 C+和内嵌SQ

11、L有所不同: (1)C+:单字符及单引号 字符串用:“ ” (2)SQL和PL/SQL块: 字符或串的分隔用: 特殊字符或大小写分隔用:“ ” 4、续行符: 对内嵌的过长的SQL,续行用:/,Xuzhou Institute of Technology,17,2 Pro *c/c+知识点总结CON,5、行长度: 如果行内容全部为ASCII:1299字节 如果行内容由多字节字符组成:324字节,Xuzhou Institute of Technology,18,2 Pro *c/c+知识点总结CON,6、逻辑操作符: SQL逻辑操作符与C不同:,注意:在SQL中允许使用C逻辑操作,包括位、自身加

12、减等等!,Xuzhou Institute of Technology,19,2 Pro *c/c+知识点总结CON,7、Pro *c/c+支持的C预处理器指令 #define #include #if #ifdef #ifndef #else #elif,Xuzhou Institute of Technology,20,2 Pro *c/c+知识点总结CON,8、内嵌入PL/SQL块格式 EXEC SQL EXECUTE BEGIN SELECT ename,sal INTO :name, :sal FROM emp WHERE empno=:eno; END; END-EXEC;,Xuz

13、hou Institute of Technology,21,2 Pro *c/c+知识点总结CON 9、编程思路,包含头文件: 需要C/C+和Pro *C/C+头文件: Stdio.h:I/O 函数scanf()、gets()等 Stdlib.h:公用库函数abort()、exit()等 String.h:字符操作函数 Sqlca.h: Sqlca结构,PC源程序必需。 Sqlda.h: Sqlda结构,ORACLE动态SQL方法4必需。 Oci.h: Oci函数,当编写LOB应用、对象应用或集合应用时,必需。,Xuzhou Institute of Technology,22,2 Pro

14、*c/c+知识点总结CON 9、编程思路CON,定义全局变量 在头文件之后定义:全局宿主变量可直接定义,也可使用定义部分定义: EXEC SQL BEGIN DECLARE SECTION; char username10, password10, server10; EXEC SQL END DECLARE SECTION; 定义外部函数: 如SQLLIB公用函数:ORACLE错误消息sqlglm()。 extern sqlglm(char *, int *, int *);,Xuzhou Institute of Technology,23,2 Pro *c/c+知识点总结CON 9、编程

15、思路CON,函数定义 必需首先定义函数: 如:void connect(); void sql_error(); void sql();,Xuzhou Institute of Technology,24,2 Pro *c/c+知识点总结CON 9、编程思路CON,主函数及其他代码 注意在退出应用时,要结束事务并断开连接。 如: EXEC SQL WHENEVER SQLERROR DO sql_error(); EXEC SQL WHENEEVER NOT FOUND DO sql_error(); . EXEC SQL COMMIT RELEASE;,Xuzhou Institute of

16、 Technology,25,2 Pro *c/c+知识点总结CON 9、编程思路CON,完整的数据库连接操纵示例 /*包含头文件*/ #include #include #include /*包含SQLCA头文件*/ #include /*定义全局宿主变量*/ char username10, password10, server10; /*定义外部函数*/ extern sqlglm(char *, int *, int *); /*定义函数*/ void connect(); void sql_error(); void sql();,Xuzhou Institute of Techno

17、logy,26,完整的数据库连接操纵示例con,/*定义函数*/ void connect(); void sql_error(); void sql(); main() /*安装错误处理*/ EXEC SQL WHENEVER SQLERROR DO sql_error(); EXEC SQL WHENEEVER NOT FOUND DO sql_error(); /*连接数据库*/ connect(); /*执行数据库操纵*/ sql(); /*提交事务,断开连接*/ EXEC SQL COMMIT RELEASE; ,Xuzhou Institute of Technology,27,完

18、整的数据库连接操纵示例con,Void connect() printf(“输入用户名:”); gets(username); printf(“输入口令:”); gets(password); printf(“输入网络服务名:”); gets(server); /*连接数据库*/ EXEC SQL CONNECT :username INDENTIFIED BY :password USING :server; ,Xuzhou Institute of Technology,28,完整的数据库连接操纵示例con,void sql_error() char msg200; size_t buf_

19、len, msg_len; buf_len=sizeof(msg); sqlglm(msg, ,Xuzhou Institute of Technology,29,完整的数据库连接操纵示例con,void sql() int dno; char dept_name15, dept_loc14; printf(“请输入部门号:”); scanf(“%d”, ,Xuzhou Institute of Technology,30,关于连接数据库,1、建立单个连接 数据库位于本机或连接一个远程数据库: 本地连接(即默认数据库): EXEC SQL CONNECT :username IDENTIFIE

20、D BY :password; 连接远程数据库即非默认或不在本机: EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server; 修改用户口令 EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server ALTER AUTHORIZATION :new_pwd; 特权连接:以SYSDBA或SYSOPER连接时,需要用IN子句。 EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server

21、IN SYSDBA MODE;,Xuzhou Institute of Technology,31,关于连接数据库con,2、建立并发连接,用AT子句。 并发连接指建立并使用多个数据库连接,并可用不同身份访问同一个数据库。 部分代码如下: void nodef_connect(char *); void main() strcpy(conn1, “database1”); strcpy(conn2, “database2”); nodef_connect(conn1); EXEC SQL AT :conn1 SELECT user INTO :username FROM dual; print

22、f(“非默认连接conn1的用户是:%sn”, username); nodef_connect(conn2); EXEC SQL AT :conn2 SELECT user INTO :username FROM dual; printf(“非默认连接conn2的用户是:%sn”, username); EXEC SQL COMMIT RELEASE; EXEC SQL AT :conn1 COMMIT RELEASE; EXEC SQL AT :conn2 COMMIT RELEASE; ,Xuzhou Institute of Technology,32,关于连接数据库con,并发连接子

23、函数: void def_connect(char conn20) printf(“输入用户名:”); gets(username); printf(“输入口令:”); gets(password); printf(“输入网络服务名:”); gets(server); EXEC SQL CONNECT :username IDENTIFIED BY :password AT :CONN USING :server; ,Xuzhou Institute of Technology,33,关于指示变量,指示变量专用于处理数据库中的NULL。当使用SELECT、INSERT、FETCH等时,若没有返

24、回结果,会出现错误信息“ORA-01405”.使用时必须跟在宿主变量后。 指示变量返回值: -1:表示数据返回结果为NULL; 0:有数据返回或已经赋值于宿主变量; 0:截断的值赋给了宿主变量,并指示原值的实际长度; -2:截断的值赋给了宿主变量,但原值的长度不能确定; 语法::host_variable INDICATOR :indicator_variable 或:host_variable:indicator_variable,Xuzhou Institute of Technology,34,关于指示变量CON,1、输出变量后 char name11; double salary; double comm; short comm_ind; printf(“输入雇员名:”); gets(name); EXEC SQL SELEC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论