日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

完全版 ESQL/C資料三( 九 )


longjmp(jmp_continue, 1);
}SQLDA中的sqldata存放著指向數(shù)據(jù)的地址 。你可以認為,如果查詢出的數(shù)據(jù)是整數(shù)(如:258),那么這個地址是指向整數(shù)的地址(也就是說,INTEL是高位在后,低位在前 。所以第一個字節(jié)為00000001,第二個字節(jié)為00000010),如果查詢出的數(shù)據(jù)是字符(‘2"),那么這個地址是指向字符的地址(也就是說,第一個字節(jié)為00110010—2的ASCII碼) 。又因為,sqldata聲明的是指向字符的指針,所以,你必須按照不同的數(shù)據(jù)類型做轉(zhuǎn)換,即:對于整數(shù),應該是(*(int *)sqldata),告訴系統(tǒng),sqldata目前指向的數(shù)據(jù)應該按照整數(shù)來解釋 。如果按照字符來解釋,那么第一個字符是ASCII值為1的字符,顯然不正確 。從數(shù)據(jù)庫向sqldata賦值時,是直接賦值 。如:*p=*q,*(P 1)=*(Q 1) 。如果從數(shù)據(jù)庫查詢出數(shù)據(jù)為258,則存放在sqlda中也是258,存放格式為:第一個字節(jié)為00000001,第二個字節(jié)為00000010 。你可以執(zhí)行以下語句,來體會上述論述 。
#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;
}第五節(jié)INFORMIX的嵌入SQL/C語言
5.1 一個簡單的入門例子
例1、查詢customer表中所有l(wèi)name的第一個字符小于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數(shù)據(jù)庫*/
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”,那么表示到達了數(shù)據(jù)集的尾部(02),或者產(chǎn)生了錯誤(大于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);
/*關(guān)閉游標*/
EXEC SQL close democursor;
/*釋放游標占用的資源*/
EXEC SQL free democursor;
/*斷開數(shù)據(jù)庫服務器的連接*/
EXEC SQL disconnect current;
printf("nDEMO1 Sample Program over.nn");
}
從上面這個例子,我們看出嵌入SQL的基本特點是:
1、每條嵌入式SQL語句都用EXEC SQL開始,表明它是一條SQL語句 。這也是告訴預編譯器在EXEC SQL和“;”之間是嵌入SQL語句 。
2、如果一條嵌入式SQL語句占用多行,在C程序中可以用續(xù)行符“”,在Fortran中必須有續(xù)行符 。其他語言也有相應規(guī)定 。
3、每一條嵌入SQL語句都有結(jié)束符號,如:在C中是“;” 。
4、嵌入SQL語句的關(guān)鍵字不區(qū)分大小寫 。
5、可以使用“/*….*/”來添加注釋 。

從上面這個例子看出,INFORMIX數(shù)據(jù)庫的嵌入SQL語句的格式同其他數(shù)據(jù)庫基本相同 。但是,它也有它自己本身的一些特點 。本節(jié)把重點放在INFORMIX數(shù)據(jù)庫所獨有的一些語句或處理方式 。
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;

推薦閱讀