麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > DB2 > 正文

用Cygwin模擬DB2的Unix/Linux開發環境(2)

2024-09-06 23:58:01
字體:
來源:轉載
供稿:網友
執行初始化了db2環境的cygwin  點擊桌面上的cygwin圖標,可以進入cygwin模擬的linux..   現在,該環境不能執行db2命令,因為沒有作db2cmd初始化環境。     為了能在該環境中使用db2,必須先運行db2cmd然后在db2的命令行環境下進入cygwin測試,是否能在cygwin環境下使用db2命令。ok,到目前為止,我們已經擁有了一個和unix一樣的環境,并且能使用db2下一步我們來寫第一個sqc程序. 編寫sqc程序   編寫一個簡單程序測試,該程序主要完成,讀取系統時間,并打印。程序主要部分為:           if (connectdatabase(sdbname,susername,spasswd)<0)   /*連接數據庫*/      {             printf("連接數據庫失敗/n");             return -1;      }      printf("連接數據庫成功!/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主機下能編譯執行。前面說過,建立這個環境的主要意義在于方便代碼移植。所以,代碼本身不用作任何更改即可在cygwin環境下編譯。修改編譯參數       安裝過程中已經說明cygwin環境下,支持大部分unix/linux命令并且安裝了gcc的編譯器,windows平臺和unix平臺下的庫略有不同,gcc和我們在windows下常用的vc編譯器參數也略有不同,下面簡要說明。1、  在unix環境中,分為靜態庫和動態庫,它們的擴展名分別是 .a 和 .so .2、  在windows中,靜態庫擴展名為 .lib 動態庫擴展名為 .dll3、  unix下,sqc程序編譯時必須鏈接 libdb2.so庫,也就是加上 -ldb2參數(忽略lib和擴展名,這是unix下c編譯器特點)4、  windows下,sqc程序必須鏈接db2api.lib靜態庫。雖然有上述不同,但是我們的修改卻非常少,本例中使用了以前我為編譯sqc寫的makefile模板。在makefile中真正需要修改的只有一行將libs= -l$(db2path)/lib -l$(db2path)/lib/db2修改為libs= -l $(db2path)/lib $(db2path)/lib/db2api.lib當然,你還需要更具環境的不同,修改makefile的其他部分,比如db2path的值啊,這些就是在不同的主機上也需要修改的,并不是windows和unix的區別,不在本文的討論之列。 運行測試程序cygwin使用windows文件系統,進入cygwin環境后 系統的根目錄/其實就是你的cygwin安裝目錄。用戶目錄通常在/home/user,(user是你windows的用戶名)  比如在windows環境中我的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");為你自己的服務器連接(為簡化測試程序,這里并沒有從配置文件中讀取連接信息)執行命令 make all你會發現編譯的結果竟然是一個exe文件,對了,這是在windows下編譯的程序,當然是一個exe文件了。ok 執行該程序,運行結果如下圖總結       完成上述步驟之后,我們有了一個仿真的unix環境,能通過makefile中的小小改動,將源代碼在各種平臺上編譯,當你不能連上主機工作時,完全可以用這個小巧的環境暫時代用。這個環境具有unix/linux高級特性,對于信號、管道、多進程、守護進程完全支持。    還有更重要的,如果希望這個程序在windows下脫離cygwin環境運行,只要把cygwin1.dll復制到windows的system32目錄下即可,這樣,你得程序在一套源碼的情況下,支持兩個環境,何樂而不為。事實上,很多從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    創建人: roc.fu   日期  2004-03-07  版 本:v1.0         功 能:讀取系統當前時間                                             描 述:**********************************************************************************/#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   /************************************************************************************     功能 :連接數據庫   *        返回值 :0 正常連接  -1 連接失敗*        參數: sdbalias 數據庫名*              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; } /************************************************************************************                   斷開數據庫連接************************************************************************************/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)   /*連接數據庫*/      {             printf("連接數據庫失敗/n");             return -1;      }      printf("連接數據庫成功!/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;} 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: www久| 成人精品 | 国产精品一区二av18款 | 国产午夜精品一区 | 亚洲人成网在线观看 | 在线观看va | 一及毛片视频 | hd性videos意大利复古 | 欧美一级片 在线播放 | 日本中文字幕网址 | 国产一级大片在线观看 | 在线观看免费毛片视频 | 国产精品久久久久影院老司 | 一本色道久久久888 国产一国产精品一级毛片 国产精品高潮视频 | 99成人精品视频 | japanese xxxxhd| 本色视频aaaaaa一级网站 | www日韩大片 | 欧美亚洲国产成人 | 91美女视频在线观看 | 亚洲一级簧片 | 一边吃奶一边摸下娇喘 | asiass极品裸体女pics | 久草免费新视频 | 日日噜噜噜夜夜狠狠久久蜜桃 | 717影院理论午夜伦八戒秦先生 | 精品国产一区二区三区四 | 国产一级aaa全黄毛片 | 在线视频观看一区二区 | 欧洲成人av | 精品久久久久久久久久久久包黑料 | 中文字幕在线播放一区 | 欧美大电影免费观看 | 双性精h调教灌尿打屁股的文案 | 无遮挡一级毛片视频 | 欧美一级不卡视频 | 深夜福利视频绿巨人视频在线观看 | 国产成人精品午夜 | 免费永久看羞羞片网站入口 | 免费香蕉成视频成人网 | 日本高清视频网站www |