青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

         北京航空航天大學(xué)計(jì)算機(jī)科學(xué)與工程系   黎杰   麥中凡

  ORACLE 公司自1979 年推出基于SQL 標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫產(chǎn)品到1997 年版本8 的推出,
ORACLE 數(shù)據(jù)庫以其支持大數(shù)據(jù)庫、多用戶的高性能事務(wù)處理,對(duì)業(yè)界各項(xiàng)工業(yè)標(biāo)準(zhǔn)的支持,
完整的安全和完整性控制,支持分布式數(shù)據(jù)庫和分布處理,具有可移植性、可兼容性和可連接
性等突出優(yōu)點(diǎn)倍受用戶喜愛,根據(jù)IDG1992 年全球UNIX 數(shù)據(jù)庫的市場(chǎng)報(bào)告,ORACLE 占市場(chǎng)
銷售量的50%。而在客戶端的開發(fā)工具方面,Visual C++ 也因其強(qiáng)大的功能和高度的靈活性
等特點(diǎn)深受廣大程序員的喜愛,因此本文旨在介紹使用Visual C++ 開發(fā)基于ORACLE 數(shù)據(jù)庫應(yīng)
用程序的兩種方法.
  
  2. 使用PRO*C 開發(fā)數(shù)據(jù)庫應(yīng)用
  
  2.1 PRO*C 工作原理
  
  PRO 系列是ORACLE 公司提供的在第三代高級(jí)程序設(shè)計(jì)語言中嵌入SQL 語句來訪問數(shù)據(jù)庫
的一套預(yù)編譯程序,包括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal 和
PRO*PL/I 六種。程序員用相應(yīng)的高級(jí)語言編寫嵌入SQL 語句的PRO 源程序(若用C 語言則稱
為PRO*C 源程序)后運(yùn)行相應(yīng)的預(yù)編譯程序,把嵌入的SQL 語句轉(zhuǎn)換為標(biāo)準(zhǔn)的ORACLE 調(diào)用并
生成目標(biāo)源程序,即純高級(jí)語言格式的源程序,然后就可以將這些源程序加入用戶的程序中調(diào)用.

  
  ORACLE 預(yù)編譯程序提供如下功能:
  
  ⑴能用六種通用的高級(jí)程序設(shè)計(jì)語言中的任何一種編寫應(yīng)用程序。
  
  ⑵遵循ANSI 標(biāo)準(zhǔn),在高級(jí)語言中嵌入SQL 語句。
  
 ?、强刹捎脛?dòng)態(tài)SQL 方法,讓程序在運(yùn)行時(shí)接受或構(gòu)造一個(gè)有效的SQL 語句。
  
 ?、葘?shí)現(xiàn)ORACLE 內(nèi)部數(shù)據(jù)類型和高級(jí)語言數(shù)據(jù)類型之間的自動(dòng)轉(zhuǎn)換。
  
 ?、煽赏ㄟ^在應(yīng)用程序中嵌入PL/SQL 事物處理塊來改進(jìn)性能。
  
 ?、誓茉诔绦蛐泻兔钚猩现付ㄋ枰念A(yù)編譯可選項(xiàng),并可在預(yù)編譯的過程中改變它們的
  
  ⑺能全面檢查嵌入的SQL 數(shù)據(jù)操縱語句和PL/SQL 塊的文法和語義。
  
  ⑻可用SQL*Net 并行存取多個(gè)地點(diǎn)的ORACLE 數(shù)據(jù)庫。
  
 ?、涂砂褦?shù)組作為輸入和輸出程序變量使用。
  
 ?、文軐?duì)應(yīng)用程序中的代碼段進(jìn)行條件預(yù)編譯。
  
 ?、咸峁┝溯^強(qiáng)的異常處理功能。
  
  由此可見,通過預(yù)編譯程序與其它高級(jí)語言的結(jié)合,既可以利用SQL 強(qiáng)有力的功能和靈活
性為數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)提供強(qiáng)有力的手段,又可以充分利用高級(jí)語言自身在系統(tǒng)開發(fā)方面
的優(yōu)勢(shì),從而提供一個(gè)完備的基于ORACLE 數(shù)據(jù)庫應(yīng)用程序的開發(fā)解決方案。
  
  2.2 在VC 中使用PRO*C
  
  每個(gè)PRO*C 源文件一般由程序頭和程序體兩部分組成。程序頭包含宿主變量(SQL 語句中
所包含的變量)說明、通訊區(qū)定義和C 外部表示符的說明等。程序體一般是由若干函數(shù)組成,
這些函數(shù)內(nèi)含有SQL 語句(以EXEC SQL 起頭的語句)。
  
  PRO*C 支持的數(shù)據(jù)類型包括VARCHAR2( 變長字符串)、NUMBER( 二進(jìn)制數(shù))、INTGER( 有
符號(hào)整數(shù))、FLOAT( 浮點(diǎn)數(shù))、STRING( 以NULL 結(jié)尾的字符串)、VARNUM( 變長二進(jìn)制數(shù))、
LONG( 變長字符串)、VARCHAR( 變長字符串)、ROWID( 二進(jìn)制值)、DATE( 定長日期/ 時(shí)間值)
、VARRAW( 變長二進(jìn)制數(shù)據(jù))、RAW( 定長二進(jìn)制數(shù)據(jù)) 、LONGRAW( 變長二進(jìn)制數(shù)據(jù))、
UNSIGNED( 無符號(hào)整數(shù))、LONGVARCHAR( 變長字符串)、LONGVARRAW( 變長二進(jìn)制數(shù)據(jù))、
CHAR( 定長字符串)、CHARZ(C 中定長以NULL 結(jié)尾的字符串)、MLSLABEL( 變長二進(jìn)制數(shù)據(jù))。
     在PRO*C 中不能使用'l' 或'u' 作詞尾或?x' 作詞頭修飾常量;在SQL 語句中使用單引號(hào)來定義字符串,用雙引號(hào)來定義特殊的或小寫字符的標(biāo)識(shí)符( 如表名等);SQL 語句中不允許使用C 中的尋址、間接、位邏輯、復(fù)合賦值、=、-、++、%、<<、>> 操作符并且用NOT、AND、OR、= 代替!、&&、||、==。
  
  下面的程序是一個(gè)聯(lián)結(jié)數(shù)據(jù)庫的PRO*C 源程序例子。
     #include  < sqlca.h > //聲明SQL通訊區(qū)
     #include  < string.h >
     #include  < afxwin.h >
  
  EXEC SQL BEGIN DECLARE SECTION;
  
  VARCHAR username[20]; //聲明宿主變量
  
  VARCHAR password[20];
  
  VARCHAR dbname[20];
  
  EXEC SQL END DECLARE SECTION;
  
  void db_connect()
  
  {
  
  strcpy((char *)username.arr,"SCOTT");
  
  username.len = strlen((char *)username.arr);
  
  strcpy((char *)password.arr,"TIGER");
  
  password.len = strlen((char *)password.arr);

  
  strcpy((char *)dbname.arr,"SUNDB");
  
  dbname.len = strlen((char *)dbname.arr);

  
  EXEC SQL WHENEVER SQLERROR STOP; //隱式異常處理
  
  EXEC SQL CONNECT :username
  
  IDENTIFIED BY :password USING :dbname;
  
  /*if (sqlca.sqlcode != 0) //顯式異常處理
  
  {
  
  AfxMessageBox(" 與Oracle數(shù)據(jù)庫連接失敗!");
  
  return;
  
  }*/
  
  }
  
  在VC 中使用PRO*C 時(shí),先用PRO*C 編寫所需的操作數(shù)據(jù)庫的子程序,再運(yùn)行PRO*C 預(yù)編
譯程序把PRO*C 源程序轉(zhuǎn)成相應(yīng)的CPP 源程序
,將該程序插入到用戶工程文件中并在需要對(duì)插
入函數(shù)進(jìn)行調(diào)用的模塊中說明函數(shù),然后就可以在此模塊中調(diào)用所需的函數(shù)。
  
  3. 使用ODBC 中間件訪問數(shù)據(jù)庫
  
  3.1 ODBC 工作原理
  
  ODBC 是Open Database Connect 即開放數(shù)據(jù)庫互連的簡(jiǎn)稱,它是由Microsoft 公司于
1991 年提出的一個(gè)用于訪問數(shù)據(jù)庫的統(tǒng)一界面標(biāo)準(zhǔn),是應(yīng)用程序和數(shù)據(jù)庫系統(tǒng)之間的中間件
。它通過使用相應(yīng)應(yīng)用平臺(tái)上和所需數(shù)據(jù)庫對(duì)應(yīng)的驅(qū)動(dòng)程序與應(yīng)用程序的交互來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫
的操作,避免了在應(yīng)用程序中直接調(diào)用與數(shù)據(jù)庫相關(guān)的操作,從而提供了數(shù)據(jù)庫的獨(dú)立性。
  
  ODBC 主要由驅(qū)動(dòng)程序和驅(qū)動(dòng)程序管理器組成。驅(qū)動(dòng)程序是一個(gè)用以支持ODBC 函數(shù)調(diào)用
的模塊(在WIN95 下通常是一個(gè)DLL),每個(gè)驅(qū)動(dòng)程序?qū)?yīng)于相應(yīng)的數(shù)據(jù)庫,當(dāng)應(yīng)用程序從基
于一個(gè)數(shù)據(jù)庫系統(tǒng)移植到另一個(gè)時(shí),只需更改應(yīng)用程序中由ODBC 管理程序設(shè)定的與相應(yīng)數(shù)據(jù)
庫系統(tǒng)對(duì)應(yīng)的別名即可。驅(qū)動(dòng)程序管理器(包含在ODBC32.DLL 中)可鏈接到所有ODBC 應(yīng)用程
序中,它負(fù)責(zé)管理應(yīng)用程序中ODBC 函數(shù)與DLL 中函數(shù)的綁定。
  
  ODBC 使用層次的方法來管理數(shù)據(jù)庫,在數(shù)據(jù)庫通信結(jié)構(gòu)的每一層,對(duì)可能出現(xiàn)依賴數(shù)據(jù)
庫產(chǎn)品自身特性的地方,ODBC 都引入一個(gè)公共接口以解決潛在的不一致性,從而很好地解決
了基于數(shù)據(jù)庫系統(tǒng)應(yīng)用程序的相對(duì)獨(dú)立性,這也是ODBC 一經(jīng)推出就獲得巨大成功的重要原因
  
  從結(jié)構(gòu)上分,ODBC 分為單束式和多束式兩類。
  
  ⑴單束式驅(qū)動(dòng)程序
  
  單束式驅(qū)動(dòng)程序介于應(yīng)用程序和數(shù)據(jù)庫之間,像中介驅(qū)動(dòng)程序一樣數(shù)據(jù)提供一個(gè)統(tǒng)一的數(shù)
  
  當(dāng)用戶進(jìn)行數(shù)據(jù)庫操作時(shí),應(yīng)用程序傳遞一個(gè)ODBC 函數(shù)調(diào)用給ODBC 驅(qū)動(dòng)程序管理器,
由ODBC API 判斷該調(diào)用是由它直接處理并將結(jié)果返回還是送交驅(qū)動(dòng)程序執(zhí)行并將結(jié)果返回。
  
  由上可見,單束式驅(qū)動(dòng)程序本身是一個(gè)數(shù)據(jù)庫引擎,由它直接可完成對(duì)數(shù)據(jù)庫的操作,盡
  
 ?、贫嗍津?qū)動(dòng)程序
  
  多束式驅(qū)動(dòng)程序負(fù)責(zé)在數(shù)據(jù)庫引擎和客戶應(yīng)用程序之間傳送命令和數(shù)據(jù),它本身并不執(zhí)行
數(shù)據(jù)處理操作而用于遠(yuǎn)程操作的網(wǎng)絡(luò)通信協(xié)議的一個(gè)界面。
  
  前端應(yīng)用程序提出對(duì)數(shù)據(jù)庫處理的請(qǐng)求,該請(qǐng)求轉(zhuǎn)給ODBC 驅(qū)動(dòng)程序管理器,驅(qū)動(dòng)程序管
理器依據(jù)請(qǐng)求的情況,就地完成或傳給多束驅(qū)動(dòng)程序,多束式驅(qū)動(dòng)程序?qū)⒄?qǐng)求翻譯為特定廠家
的數(shù)據(jù)庫通信接口(如Oracle 的SQLNet)所能理解的形式并交于接口去處理,接口把請(qǐng)求經(jīng)
網(wǎng)絡(luò)傳送給服務(wù)器上的數(shù)據(jù)引擎,服務(wù)器處理完后把結(jié)果發(fā)回給數(shù)據(jù)庫通信接口,數(shù)據(jù)庫接口
將結(jié)果傳給多束式ODBC 驅(qū)動(dòng)程序,再由驅(qū)動(dòng)程序?qū)⒔Y(jié)果傳給應(yīng)用程序。
  
  3.2 在VC 中使用ODBC
  
  Visual C++ 中提供了CDatabase、CRecordset、CRecordView、CDBException 和
CFieldExchange 五個(gè)類,這些類封裝了ODBC SDK 函數(shù)
,從而使用戶可以無需了解SDK 函數(shù)
  
  CDatabase 類:封裝了與數(shù)據(jù)庫建立連接,控制事務(wù)的提交和回滾及執(zhí)行SQL 語句的方法
  
  CRecordset 類:封裝了大部分操縱數(shù)據(jù)庫的方法,包括瀏覽、修改記錄,控制游標(biāo)移動(dòng)
  
  CRecordView 類:提供了與recordset 對(duì)象相連接的視,可以建立視中的控件與數(shù)據(jù)庫數(shù)
  
  CDBException 類:提供了對(duì)數(shù)據(jù)庫操作的異常處理,可以獲得操作異常的相關(guān)返回代碼
  
  CFieldExchange 類:提供了用戶變量與數(shù)據(jù)庫字段之間的數(shù)據(jù)交換,如果不需要使用自
定義類型,你將不用直接調(diào)用該類的函數(shù),MFC Wizard 將自動(dòng)為程序員建立連接。
  
  4. 兩種方法的比較
  
  綜上所述,使用這兩種方法在Visual C++ 中都可以很方便地開發(fā)出基于ORACLE 數(shù)據(jù)庫
的應(yīng)用程序,同時(shí),這兩種方法又各有其優(yōu)缺點(diǎn)。ODBC 由于有MFC 強(qiáng)大的類庫支持而使得編
程實(shí)現(xiàn)非常方便,同時(shí)可移植性也很強(qiáng),在異構(gòu)的數(shù)據(jù)庫之間移植也只需更改很少的一部分程
序,但是,由ODBC 的實(shí)現(xiàn)機(jī)制我們可以看到,與PRO*C 相比,應(yīng)用程序需要經(jīng)過ODBC 驅(qū)動(dòng)
程序管理器和ODBC 驅(qū)動(dòng)程序兩層才能和數(shù)據(jù)庫通信接口建立聯(lián)系,而PRO*C 是直接與通信接
口聯(lián)系,因此建立在ODBC 上應(yīng)用程序的執(zhí)行效率會(huì)相對(duì)低一些。PRO*C 具有執(zhí)行效率高,支
持嵌入式PL/SQL 塊等ORACLE 自身特有的優(yōu)點(diǎn),但正因?yàn)橛辛诉@些優(yōu)點(diǎn),使得用PRO*C 開發(fā)出
的應(yīng)用程序無法向異構(gòu)數(shù)據(jù)庫平臺(tái)移植。
posted on 2007-04-24 22:29 哈哈 閱讀(1719) 評(píng)論(1)  編輯 收藏 引用

評(píng)論:
# re: 用VC 開發(fā)基于ORACLE數(shù)據(jù)庫應(yīng)用程序的兩種方法 2007-07-22 16:22 | oa
能否給出使用ODBC 中間件訪問數(shù)據(jù)庫更詳細(xì)的介紹呢?比如連接和操作數(shù)據(jù)庫的具體代碼。謝謝  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产乱子精品免费女| 国产精品一区免费观看| 亚洲精品中文字幕有码专区| 欧美va亚洲va国产综合| 男人的天堂亚洲| 欧美国产国产综合| 激情欧美一区| 亚洲国产精品黑人久久久| 亚洲精品社区| 亚洲性感美女99在线| 欧美一区中文字幕| 欧美高清视频一区| 亚洲一级网站| 久久综合网络一区二区| 欧美国产成人精品| 国产精品亚洲产品| 亚洲七七久久综合桃花剧情介绍| 夜夜嗨一区二区| 久久精品免费看| 最新国产乱人伦偷精品免费网站 | 亚洲国产日韩一级| 国产精品99久久久久久有的能看 | 亚欧成人精品| 女女同性精品视频| 日韩亚洲精品电影| 欧美在线地址| 欧美日韩的一区二区| 国产亚洲欧美日韩日本| 亚洲美女黄网| 久久午夜电影网| 夜夜躁日日躁狠狠久久88av| 久久高清国产| 欧美色区777第一页| 伊人色综合久久天天| 亚洲在线观看视频网站| 亚洲电影在线| 久久激情视频| 国产欧美一区二区精品性| 99av国产精品欲麻豆| 久久综合色天天久久综合图片| 一本大道久久a久久综合婷婷| 久久久久久久久久看片| 国产乱码精品一区二区三区不卡 | 久久免费高清视频| 国产精品热久久久久夜色精品三区 | 美女在线一区二区| 国产精品超碰97尤物18| 亚洲精品中文在线| 欧美电影专区| 久久亚洲综合色| 国产日韩在线一区| 亚洲人人精品| 欧美激情精品久久久| 久久人体大胆视频| 怡红院精品视频| 在线播放亚洲一区| 久久aⅴ国产紧身牛仔裤| 欧美激情一区二区三区在线视频观看 | 久久国产精品久久久久久| 久久午夜激情| 欧美一级淫片aaaaaaa视频| 国产精品丝袜xxxxxxx| 亚洲欧美日韩国产一区| 亚洲香蕉网站| 国产视频观看一区| 久久久高清一区二区三区| 亚洲欧美在线一区| 国产精品亚洲欧美| 欧美专区在线播放| 久久久.com| 亚洲久久视频| 99成人免费视频| 国产精品久久久久91| 欧美亚洲免费在线| 久久国产精品久久久| 亚洲成人资源网| 亚洲欧洲在线免费| 国产精品久久久久一区二区三区共| 亚洲私人影院在线观看| 亚洲天堂网在线观看| 国产一区二区三区四区hd| 久久一区激情| 欧美精品18+| 久久国产免费| 农村妇女精品| 午夜精品久久久久久久久| 欧美自拍偷拍| 在线一区二区三区四区| 亚洲欧洲av一区二区三区久久| 激情综合色综合久久综合| 亚洲国产精品久久久久婷婷老年 | 日韩一二三区视频| 国产老女人精品毛片久久| 免费亚洲婷婷| 欧美视频一区在线| 免费在线国产精品| 欧美午夜电影网| 免费欧美网站| 国产麻豆一精品一av一免费| 开元免费观看欧美电视剧网站| 欧美日韩精品| 久久综合色一综合色88| 国产精品国产三级国产aⅴ9色| 母乳一区在线观看| 国产日产高清欧美一区二区三区| 亚洲高清av在线| 欧美一区国产一区| 一区二区三区四区五区精品视频| 亚洲小说春色综合另类电影| 一本色道久久综合亚洲精品按摩| 亚洲精品中文字幕在线| 久久精品观看| 日韩视频在线一区| 久久精品99久久香蕉国产色戒| 一区二区三区视频在线看| 久久亚裔精品欧美| 欧美一区国产二区| 国产精品xxxav免费视频| 免费欧美电影| 国内一区二区三区在线视频| 日韩网站在线看片你懂的| 亚洲第一伊人| 久久久www成人免费毛片麻豆| 午夜精品美女久久久久av福利| 欧美人与禽猛交乱配视频| 亚洲高清在线播放| 樱桃成人精品视频在线播放| 亚洲综合三区| 亚洲欧美在线x视频| 欧美日韩亚洲一区二| 欧美黑人国产人伦爽爽爽| 国模私拍一区二区三区| 性8sex亚洲区入口| 欧美在线免费观看视频| 国产精品久久毛片a| 亚洲素人在线| 欧美一区二区精品久久911| 国产精品亚洲网站| 午夜激情一区| 久久久久久久久久久久久久一区 | 欧美一级电影久久| 欧美在线影院| 国产视频在线观看一区二区三区| 亚洲深夜影院| 欧美诱惑福利视频| 国产一区二区三区四区| 久久久亚洲精品一区二区三区| 久久裸体视频| 亚洲国产一区二区视频| 欧美精品激情| 在线一区亚洲| 欧美在线网址| 亚洲盗摄视频| 欧美日本一区二区高清播放视频| 亚洲精品乱码久久久久| 亚洲午夜视频在线观看| 国产日韩欧美一区二区三区在线观看| 午夜精品免费在线| 欧美成人精品三级在线观看| 亚洲乱码国产乱码精品精可以看 | 激情久久中文字幕| 欧美ed2k| 亚洲一区二区三| 久久久久久久精| 亚洲精品久久嫩草网站秘色| 91久久视频| 亚洲私人影院| 一色屋精品视频免费看| 欧美精品久久久久久久久老牛影院| 亚洲美女中出| 久久视频这里只有精品| 日韩视频免费在线观看| 国产精品日韩在线观看| 狼人社综合社区| 亚洲一二区在线| 欧美二区不卡| 欧美在线观看一区二区三区| 亚洲国产欧美日韩精品| 国产麻豆精品在线观看| 欧美日本韩国| 久久免费视频一区| 999亚洲国产精| 免费观看久久久4p| 亚洲欧美中文日韩v在线观看| 在线免费观看日本欧美| 国产精品人人爽人人做我的可爱 | 亚洲影音一区| 亚洲国产国产亚洲一二三| 欧美日韩一区在线观看视频| 久久精品成人一区二区三区| 日韩午夜激情av| 欧美激情在线观看| 欧美专区中文字幕| 亚洲午夜免费福利视频| 亚洲日本aⅴ片在线观看香蕉| 国产日韩欧美中文在线播放| 欧美视频在线看| 欧美电影在线播放| 久久综合狠狠综合久久综合88 | 午夜日韩视频|