Chinaunix首页 | 论坛 | 博客
  • 博客访问: 476559
  • 博文数量: 112
  • 博客积分: 2436
  • 博客等级: 大尉
  • 技术积分: 2769
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-04 19:48
文章分类

全部博文(112)

文章存档

2013年(7)

2012年(105)

分类: Mysql/postgreSQL

2012-07-17 17:28:22

 

1、嵌入SQL语句的C程序格式:

              + EXEC SQL INCLUDE sqlca.h;

 

2、嵌入C程序的SQL语句的格式:

              所有的SQL语言前+ EXEC SQL ……。(如:EXEC SQL DROP TABLE table_name

 

3C语言与SQL语言的通信:

              #1 通过sqlca.h中的SQLCA结构体

              #2 通过主变量(即:负责C语句与SQL语句数据交换的变量)

1>    主变量在C程序中的声明格式:

EXEC SQL BEGIN DECLARE SECTION;

       char wh_area[6];

       char city[12];

       int wh_area;

EXEC SQL END DECLARE SECTION;

注意:

1>    一组主变量一次只能存放一条记录。(并不能完全满足SQL语句向应用程序输出数据的要求)

2>    经过声明的主变量用在SQL语句中时,必须加前缀冒号

#3 通过游标(即:系统开设的一个数据缓冲区,存放SQL语句的执行结果集)

1>    用法:每个游标都有一个名字,用户可用SQL语句逐一从游标中获取记录,并赋给主变量,交由C语言进一步处理

2>    游标命令与格式:

1) DECLAREEXEC SQL DECLARE <游标名> CURSOR FOR >

2) OPENEXECL SQL OPEN <游标名>

3) FETCH: EXEC SQL FETCH <游标名> INTO <主变量1>,:<主变量2>4CLOSEEXEC SQL CLOSE <游标名>

 

4、嵌入SQLC应用程序调试的4个步骤:

       #1 预编译:C语言编译程序不能识别应用程序中的SQL语句,需经过预处理程序将其转换成C语句。

       #2 编译:

       #3 连接:

       #4 运行:

 

实例分析:

  1. ……
  2. EXEC SQL INCLUDE sqlea.h;/*(1)定义SQL通信区 */  
  • EXEC SQL BEGIN DECLARE SECTION;/*(2)说明主变量开始*/  
  • CHAR title_id(7);  
  • CHAR title(81);  
  • INT royalty;  
  • EXEC SQL END DECLARE SECTION;/*说明主变量结束*/  
  • int main(void)  
  • {  
  •     EXEC SQL DECLARE C1 CURSOR FOR  /*(3)游标操作(定义游标)*/  
  •     SELECT tit_id,tit,roy FROM titles;/*从title表查tit_id,tit,roy*/ 
  •   
  •     while(1) 
  •     {  
  •     /*(5)游标操作(将当前数据放入主变量并推进游标指针)*/  
  •     EXEC SQL FETCH C1 INTO:title_id:title,:royalty;  
  •     
  •     /*(6)利用SQLCA中的状态信息决定何时推出循环*/  
  •     if(sqlca.sqlcode<>SUCCESS)  
  •         break;/*打印查询结果*/  
  •     printf("Title ID:%s, Royalty:%d",:title_id,:royalty");  
  •     printf("Title:%s",:title);  
  •     }  
  •     EXEC SQL CLOSE C1;/*(7)游标操作(关闭游标)*/  
  •     return 0;
  • 阅读(7643) | 评论(0) | 转发(2) |
    给主人留下些什么吧!~~