longjmp(jmp_continue, 1);
}SQLDA中的sqldata存放着指向数据的地址 。你可以认为,如果查询出的数据是整数(如:258),那么这个地址是指向整数的地址(也就是说,INTEL是高位在后,低位在前 。所以第一个字节为00000001,第二个字节为00000010),如果查询出的数据是字符(‘2"),那么这个地址是指向字符的地址(也就是说,第一个字节为00110010—2的ASCII码) 。又因为,sqldata声明的是指向字符的指针,所以,你必须按照不同的数据类型做转换,即:对于整数,应该是(*(int *)sqldata),告诉系统,sqldata目前指向的数据应该按照整数来解释 。如果按照字符来解释,那么第一个字符是ASCII值为1的字符,显然不正确 。从数据库向sqldata赋值时,是直接赋值 。如:*p=*q,*(P 1)=*(Q 1) 。如果从数据库查询出数据为258,则存放在sqlda中也是258,存放格式为:第一个字节为00000001,第二个字节为00000010 。你可以执行以下语句,来体会上述论述 。
#include
main()
{
int li_i;
int * lp_int;
char * lp_char;
char lc_char;
li_i=258;
lp_char=malloc(10);
lp_int=lp_char;
*lp_int=258;
/*(lp_char 2)="";*/
printf("*lp_char=%dn",*((int *)lp_char));
printf("*lp_char=%sn",lp_char);
return;
}第五节INFORMIX的嵌入SQL/C语言
5.1 一个简单的入门例子
例1、查询customer表中所有lname的第一个字符小于C的顾客信息 。
#include
/*定义两个常量*/
EXEC SQL define FNAME_LEN 15;
EXEC SQL define LNAME_LEN 15;
main()
{
/*声明宿主变量*/
EXEC SQL BEGIN DECLARE SECTION;
char fname[ FNAME_LEN1 ];
char lname[ LNAME_LEN1 ];
EXEC SQL END DECLARE SECTION;
printf( "DEMO1 Sample ESQL Program running.nn");
/*出错处理,如果返回错误信息,则停止该程序*/
EXEC SQL WHENEVER ERROR STOP;
/*连接到stores7数据库*/
EXEC SQL connect to "stores7";
/*声明一个游标*/
EXEC SQL DECLARE democursor cursor for
select fname, lname
into :fname, :lname
from customer
where lname < "C";
/*打开游标*/
EXEC SQL open democursor;
/*如果SQLSTATE不等于“00”,那么表示到达了数据集的尾部(02),或者产生了错误(大于02)*/
for (;;)
{
EXEC SQL fetch democursor;
if (strncmp(SQLSTATE, "00", 2) != 0)
break;
printf("%s %sn",fname, lname);
}
/*打印错误信息*/
if (strncmp(SQLSTATE, "02", 2) != 0)
printf("SQLSTATE after fetch is %sn", SQLSTATE);
/*关闭游标*/
EXEC SQL close democursor;
/*释放游标占用的资源*/
EXEC SQL free democursor;
/*断开数据库服务器的连接*/
EXEC SQL disconnect current;
printf("nDEMO1 Sample Program over.nn");
}
从上面这个例子,我们看出嵌入SQL的基本特点是:
1、每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句 。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句 。
2、如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”,在Fortran中必须有续行符 。其他语言也有相应规定 。
3、每一条嵌入SQL语句都有结束符号,如:在C中是“;” 。
4、嵌入SQL语句的关键字不区分大小写 。
5、可以使用“/*….*/”来添加注释 。
从上面这个例子看出,INFORMIX数据库的嵌入SQL语句的格式同其他数据库基本相同 。但是,它也有它自己本身的一些特点 。本节把重点放在INFORMIX数据库所独有的一些语句或处理方式 。
5.2 宿主变量
宿主变量就是在嵌入式SQL语句中引用主语言说明的程序变量 。如:
EXEC SQL connect to :hostvar;
1)、定义宿主变量
方法1:采用BEGIN DECLARE SECTION 和END DECLARE SECTION之间给主变量说明 。如:
EXEC SQL BEGIN DECLARE SECTION;
char fname[ FNAME_LEN1 ];
char lname[ LNAME_LEN1 ];
EXEC SQL END DECLARE SECTION;
推荐阅读
- kha苹果是什么版本
- 荒野乱斗九游版激活码在哪
- HTC U11国行版系统更新了什么?HTC U11国行版系统更新内容
- 小米MIX2黑色陶瓷版和全陶瓷尊享版哪个好?哪个更划算?
- 增补版 SCO UNIX快速入门
- 小米MIX2黑色陶瓷版上手怎么样?小米黑色陶瓷版多少钱?
- 小米全陶瓷尊享版有哪些颜色?小米全陶瓷尊享版哪个颜色更好看?
- K700新版软件R2AY004试用手记
- 小米Note3吴亦凡限量版什么时候发布?
- ESQL编程使用说明
