C语言采用嵌入式方式操作数据库exec_sql

上传人:飞*** 文档编号:40229839 上传时间:2018-05-24 格式:DOC 页数:8 大小:82KB
返回 下载 相关 举报
C语言采用嵌入式方式操作数据库exec_sql_第1页
第1页 / 共8页
C语言采用嵌入式方式操作数据库exec_sql_第2页
第2页 / 共8页
C语言采用嵌入式方式操作数据库exec_sql_第3页
第3页 / 共8页
C语言采用嵌入式方式操作数据库exec_sql_第4页
第4页 / 共8页
C语言采用嵌入式方式操作数据库exec_sql_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《C语言采用嵌入式方式操作数据库exec_sql》由会员分享,可在线阅读,更多相关《C语言采用嵌入式方式操作数据库exec_sql(8页珍藏版)》请在金锄头文库上搜索。

1、Exec sql/c【嵌入嵌入 SQL】概念:概念:利用高级语言的过程性结构来弥补 SQL 语言实现复杂应用方面的不足。 嵌入 SQL 的高级语言称为主语言或宿主语言。在混合编程中,SQL 语句负责操作数据库,高级语言语句负责控制程序流程。预编译方法预编译方法由 DBMS 的预处理程序对源程序扫描,识别出 SQL 语句,把它们转换成主语言调用 语句,以使主语言编译器能识别它,最后由主语言编译器将整个源程序编译成目标码。嵌入式嵌入式 SQL 的一般形式的一般形式所有的嵌入式 SQL 语句都必须加前缀 EXEC SQL在 C 语言中: EXEC SQL 例如:EXEC SQL DROP TABLE

2、 Student;嵌入式嵌入式 SQL 与主语言的通信与主语言的通信1:向主语言传递 SQL 语句执行状态信息【状态信息】 ,使语言能够据此信息控制程序 流程,用 SQL 通信区(SQLCA【SQL Communication Area】 )实现。2:主语言向 SQL 语句提供参数,主要用主变量(Host Variable)实现;3:将 SQL 语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor) 实现。SQL 通信区通信区SQLCA 中有一个存放每次执行 SQL 语句后返回代码的变量 SQLCODE。每次执行完 SQL 语句后都应该测试一下 SQLCODE 的值,以了解

3、该 SQL 语句执行情况 并做相应处理,如果 SQLCODE 等于预定的常量 SUCCESS,则表示 SQL 语句成功,否则 在 SQLCODE 中存放错误代码。SQLCA(SQL Communication Access) 系由系统提供之系统记录架构,作为 back end 与 front end 之间沟通之用,当发生 I/O 状态时,系统会记录该状态于 SQLCA 中,front end 即可依据其其内容得知 I/O 运作是否成功,再决定往后执行的步骤。SQLCA 为系统定义 之 GLOBAL 变量,以下为其架构并介绍其内容与用途: SQLCA 结构结构DEFINE SQLCA RECOR

4、D SQLCODE INTEGER, SQLERRM CHAR(71), SQLERRP CHAR(8), SQLERRD ARRAY6 OF INTEGER, SQLAWARN CHAR(8) END RECORD SQLCODE 表示表示 I/O 的结果的结果 ;返回值说明0 表示 I/O 成功 100表示 NOTFOUND打开游标-推进游标-关闭游标-释放游标】: /定义游标 EXEC SQL DECLARE cur CURSOR FORselect name,sex from student where no like :no;EXEC SQL OPEN cur;/打开游标for(;)

5、EXEC SQL fetch cur into :name,:sex;/推进游标if(sqlca.sqlcode=100)/没有满足条件的数据break;/操作数据EXEC SQL close cur;/关闭游标EXEC SQL free cur;/释放游标 使用事务使用事务事务的三个常用操作: 开始事务(BEGIN WORK); 提交事务(COMMIT WORK); 回滚(ROLLBACK WORK);例如:例如:EXEC SQL BEGIN WORK;/数据库操作if(sqlca.sqlcode用来指明查询出的数据在指定列是可修改 的。如果是为 CURRENT 形式的 DELETE 语句作

6、准备,则不必使用上述子句。2:检查该记录是否为该修改或删除的记录。如果是,则修改或删除之。这时 UPDATE 和 DELETE 语句中要用子句 WHERE CURRENT OF,表示修改或删除的是最 近一次取出的记录,即游标指针指向的记录。例如:更新操作例如:更新操作char yn;EXEC SQL BEGIN DELCARE SECTION;/申明主变量 char Sno20,Sname20,NEWSname20; EXEC SQL END DECLARE SECTION;/运用游标进行查询记录 EXEC SQL DECLARE cur CURSOR FOR SELECT Sno, Snam

7、e FROM Student WHERE Sno like 01% FOR UPDATE OF Sname;EXEC SQL OPEN cur;/打开游标while(1) /*用循环结构逐条处理结果集中的记录*/EXEC SQL FETCH cur INTO :Sno,:Sname;if(sqlca.sqlcode=100)break; /*若查询结果处理完或出现错误,则退出循环*/printf(“no=%s,name=%s“,Sno,Sname);printf(“UPDATE Name(y/n)?“); /*问用户是否需要修改*/scanf(“%c“, if(yn=y or yn=Y) /*

8、需要修改*/printf(“INPUT NEW Name:“);scanf(“%d“,EXEC SQL UPDATE Student SET Sname = :NEWSname WHERE CURRENT OF cur; ; EXEC SQL CLOSE cur;数据类型数据类型1、SQL 与与 C 数据类型的对应简单类型数据类型的对应简单类型 SQLCCHAR(n)char(n+1) CHARCTER(n)char *SMALLINTshortINTERGERintSMALLFLOATfloatFLOAT/DOUBLEdoubleSERIALlong intDATElong intVARCH

9、ARstring2、数据类型转换、数据类型转换 转换类型 转换后FLOAT DECIMAL(16)SMALLFLOATDECIMAL(8)INTERGERDECIMAL(10,0)SAMLLINTDECIMAL(5,0)有关有关 CHAR 类型的函数类型的函数1、以空值结尾的串的操作函数、以空值结尾的串的操作函数 rdownshift(char *s) 把一个字符串中的所有字母转换成小写形式。 rupshift(char *s) 把一个字符串中的所有字母转换成大写形式。 stcat(char *s, char *dest) 把一个字符串同另一个字符串相连接。 stcmpr(char *s1,

10、char *s2) 比较两个字符串。 stcopy(char *from, char *to) 把一个字符串拷贝到另一个字符串。 stleng(char *string) 统计字符串的长度。 2、定长串的操作函数、定长串的操作函数 bycmpr(char byte1, byte2, rpt len) 比较两组连续的字节内存块。 bycopy(char *from, char *to, int len) 把一块内存的内容拷贝到另一块内存。 byfill(char *to, int len, char ch) 用字符填充指定的内存块。 byleng(char from, int count) 统计

11、有效字符的数目。有效字符是指字符串去除了末尾空格所剩的字符。 3、字符串操作函数、字符串操作函数 ldchar(char *from, int num, char *to) 拷贝定长串到空值结尾的串。 stchar(char *from, char *to, int num) 拷贝空值结尾的串到定长串。 4、字符串函数简单数值转换、字符串函数简单数值转换 rstod(char *str, double *dblval) 把以空值结束的字符串转换成 C 的 double 型 rstoi(char *str, int *intval) 把以空值结束的字符串转换成 C 的 int 类型。 rstol(char *str, long *lngval) 把以空值结束的字符串转换成 C 的 long 类型。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号