国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > DB2 > 正文

用Cygwin模擬DB2的Unix/Linux開發(fā)環(huán)境(2)

2024-09-06 23:58:01
字體:
供稿:網(wǎng)友
執(zhí)行初始化了db2環(huán)境的cygwin  點擊桌面上的cygwin圖標,可以進入cygwin模擬的linux..   現(xiàn)在,該環(huán)境不能執(zhí)行db2命令,因為沒有作db2cmd初始化環(huán)境。     為了能在該環(huán)境中使用db2,必須先運行db2cmd然后在db2的命令行環(huán)境下進入cygwin測試,是否能在cygwin環(huán)境下使用db2命令。ok,到目前為止,我們已經(jīng)擁有了一個和unix一樣的環(huán)境,并且能使用db2下一步我們來寫第一個sqc程序. 編寫sqc程序   編寫一個簡單程序測試,該程序主要完成,讀取系統(tǒng)時間,并打印。程序主要部分為:           if (connectdatabase(sdbname,susername,spasswd)<0)   /*連接數(shù)據(jù)庫*/      {             printf("連接數(shù)據(jù)庫失敗/n");             return -1;      }      printf("連接數(shù)據(jù)庫成功!/n");                                                        exec sql select char(current timestamp)               into :sdatetime               from (values 1) as a;              if dataerror       {              disconnectdb();              return -1;       }       printf("當前時間%s/n",sdatetime);       disconnectdb(); (完整程序建附件)該程序在unix主機下能編譯執(zhí)行。前面說過,建立這個環(huán)境的主要意義在于方便代碼移植。所以,代碼本身不用作任何更改即可在cygwin環(huán)境下編譯。修改編譯參數(shù)       安裝過程中已經(jīng)說明cygwin環(huán)境下,支持大部分unix/linux命令并且安裝了gcc的編譯器,windows平臺和unix平臺下的庫略有不同,gcc和我們在windows下常用的vc編譯器參數(shù)也略有不同,下面簡要說明。1、  在unix環(huán)境中,分為靜態(tài)庫和動態(tài)庫,它們的擴展名分別是 .a 和 .so .2、  在windows中,靜態(tài)庫擴展名為 .lib 動態(tài)庫擴展名為 .dll3、  unix下,sqc程序編譯時必須鏈接 libdb2.so庫,也就是加上 -ldb2參數(shù)(忽略lib和擴展名,這是unix下c編譯器特點)4、  windows下,sqc程序必須鏈接db2api.lib靜態(tài)庫。雖然有上述不同,但是我們的修改卻非常少,本例中使用了以前我為編譯sqc寫的makefile模板。在makefile中真正需要修改的只有一行將libs= -l$(db2path)/lib -l$(db2path)/lib/db2修改為libs= -l $(db2path)/lib $(db2path)/lib/db2api.lib當然,你還需要更具環(huán)境的不同,修改makefile的其他部分,比如db2path的值啊,這些就是在不同的主機上也需要修改的,并不是windows和unix的區(qū)別,不在本文的討論之列。 運行測試程序cygwin使用windows文件系統(tǒng),進入cygwin環(huán)境后 系統(tǒng)的根目錄/其實就是你的cygwin安裝目錄。用戶目錄通常在/home/user,(user是你windows的用戶名)  比如在windows環(huán)境中我的cygwin安裝在d:/cygwin 我的用戶目錄是 d:/cygwin/home/rocfu,,如果你在cygwin中使用pwd命令察看當前路徑,會顯示/home/roc. 在用戶目錄下新建db2test子目錄,附件附帶文件 makefile  test.sqc,將這三個文件復制到db2test目錄.修改 test.sqc中的下面代碼       strcpy(susername,"db2admin");      strcpy(spasswd,"db2admin");      strcpy(sdbname,"dwctrldb");為你自己的服務器連接(為簡化測試程序,這里并沒有從配置文件中讀取連接信息)執(zhí)行命令 make all你會發(fā)現(xiàn)編譯的結果竟然是一個exe文件,對了,這是在windows下編譯的程序,當然是一個exe文件了。ok 執(zhí)行該程序,運行結果如下圖總結       完成上述步驟之后,我們有了一個仿真的unix環(huán)境,能通過makefile中的小小改動,將源代碼在各種平臺上編譯,當你不能連上主機工作時,完全可以用這個小巧的環(huán)境暫時代用。這個環(huán)境具有unix/linux高級特性,對于信號、管道、多進程、守護進程完全支持。    還有更重要的,如果希望這個程序在windows下脫離cygwin環(huán)境運行,只要把cygwin1.dll復制到windows的system32目錄下即可,這樣,你得程序在一套源碼的情況下,支持兩個環(huán)境,何樂而不為。事實上,很多從linux移植到windows的程序就是這么干的。 附件makefile.suffixes: .sqc .c .o gcc=gcccc=gcc  embprep=embprep  ccflags=-g -mno-cygwin   cflags= $(extra_cflags) -i$(db2path)/include -mno-cygwin db2path=/cygdrive/d/db2/sqllib#libs= -l$(db2path)/lib -l$(db2path)/lib/db2 libs= -l $(db2path)/lib $(db2path)/lib/db2api.lib uid=db2adminpwd=db2admindb=dwctrldb billhome=.billbin=.billsrc=$(billhome)billobj=$(billhome)billlib=../lib include=-i. -i$(billhome)/src -i$(billlib) /       -i$(db2path)/include /       -i/usr/lib -i/usr/local/include /       -i/usr/include               target1 = $(billbin)/test  all:$(target1) .sqc.o:       db2 connect to $(db) user $(uid) using $(pwd);/       db2 prep $*.sqc bindfile;/       db2 bind $*.bnd;/       db2 connect reset;/       db2 terminate;/       $(cc) $(include) -o $*.o -c $(ccflags) $(cflags) $(defs)  $*.c ; .c.o:       $(cc) $ (include) -o $*.o -c $(ccflags) $(cflags) $(libs) $(defs) $*.c --def tandard.def        pick_objs1= $(billsrc)/test.o $(billbin)/test:    $(comm_objs) $(pick_objs1)              $(cc) $(cflags) -o $(target1)  $(pick_objs1) $(comm_objs) $(oracle_lib)$(linkflag) $(libs)   clean:       rm -f *.o $(target1) test.c test.o test.bnd test.sqc/**********************************************************************************                 文件名:test.sqc    創(chuàng)建人: roc.fu   日期  2004-03-07  版 本:v1.0         功 能:讀取系統(tǒng)當前時間                                             描 述:**********************************************************************************/#include <stdio.h>#include <sql.h>#include <sqlenv.h>#include <sqlda.h>#include <sqlca.h>#include <sqladef.h>#include <sqlenv.h> struct sqlca sqlca;char gusername[20];char gpassword[20];char gservername[20];char gtpassword[20]; #ifndef dataerror#define dataerror   (sqlca.sqlcode<0 )#endif   /************************************************************************************     功能 :連接數(shù)據(jù)庫   *        返回值 :0 正常連接  -1 連接失敗*        參數(shù): sdbalias 數(shù)據(jù)庫名*              suser    用戶名*              spasswd  密碼***********************************************************************************/int connectdatabase (char *sdbalias,char *suser,char *spasswd){    int        rc = 0;    char       smsg[1024];         exec sql begin declare section ;        char db[15] ;        char userid[15] ;         char passwd[15] ;     exec sql end declare section;     memset(smsg,0,1024);    printf("1/n");    strcpy( db, sdbalias) ;    strcpy( userid, suser) ;        strcpy( passwd, spasswd) ;        if ( strlen(userid) == 0)    {        printf("2/n");     exec sql connect to :db;     }    else     {              printf("用戶名:%s/n",userid);           printf("密碼:%s/n",passwd);           printf("密碼:%s/n",db);                      exec sql connect to :db user :userid using :passwd;         printf("4/n");     }        return 0; } /************************************************************************************                   斷開數(shù)據(jù)庫連接************************************************************************************/void disconnectdb(){       exec sql connect reset;}  int main(int argc, char *argv[]) {      int iret;                exec sql begin declare section;            char susername[100];          char spasswd[100];          char sdbname[100];          char sdatetime[100];        exec sql end declare section;              printf("start read config.../n");       strcpy(susername,"db2admin");      strcpy(spasswd,"db2admin");      strcpy(sdbname,"dwctrldb");              if (connectdatabase(sdbname,susername,spasswd)<0)   /*連接數(shù)據(jù)庫*/      {             printf("連接數(shù)據(jù)庫失敗/n");             return -1;      }      printf("連接數(shù)據(jù)庫成功!/n");                                                        exec sql select char(current timestamp)               into :sdatetime               from (values 1) as a;              if dataerror       {              disconnectdb();              return -1;       }       printf("當前時間%s/n",sdatetime);       disconnectdb();       printf("完成/n");       return 0;} 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新龙县| 宜丰县| 金乡县| 宜春市| 祁东县| 宝丰县| 东明县| 阿鲁科尔沁旗| 于田县| 邹平县| 苍南县| 中方县| 合作市| 河北省| 清涧县| 宝坻区| 永善县| 宁夏| 光泽县| 池州市| 阿拉善盟| 囊谦县| 芦山县| 汽车| 聊城市| 汉源县| 长寿区| 阿瓦提县| 巢湖市| 大化| 政和县| 宁夏| 新野县| 石首市| 望江县| 深水埗区| 大石桥市| 延庆县| 广饶县| 广东省| 夏津县|