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

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

用 VC 開 發(fā) Oracle 數(shù) 據(jù) 庫 應(yīng) 用 程 序

2024-08-29 13:40:53
字體:
供稿:網(wǎng)友

  ____Oracle公司于1997年推出的Oracle 8數(shù)據(jù)庫以其支持大數(shù)據(jù)庫、多用戶的高性能事務(wù)處理、支持業(yè)界各項工業(yè)標準、完整的安全和完整性控制、支持分布式數(shù)據(jù)庫和分布處理,具有可移植性、可兼容性和可連接性等突出優(yōu)點倍受用戶喜愛。 而在客戶端的開發(fā)工具方面,Visual C++也因其強大的功能和高度的靈活性等特點深受廣大程序員的喜愛。本文旨在介紹使用Visual C++開發(fā)基于Oracle數(shù)據(jù)庫應(yīng)用程序的兩種方法。
  
  ____使用PRO*C開發(fā)數(shù)據(jù)庫應(yīng)用
  
  ____1.PRO*C工作原理
  
  ____PRO系列是Oracle公司提供的在第三代高級程序設(shè)計語言中嵌入SQL語句來訪問數(shù)據(jù)庫的一套預(yù)編譯程序,包括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal和P RO*PL/I六種。程序員用相應(yīng)的高級語言編寫嵌入SQL語句的PRO源程序(若用C語言則稱為 PRO*C源程序),然后運行相應(yīng)的預(yù)編譯程序,把嵌入的SQL語句轉(zhuǎn)換為標準的Oracle調(diào)用并生成目標源程序,即純高級語言格式的源程序,最后將這些源程序加入用戶的程序中調(diào)用 (其處理過程如下圖)。
  
  
  
  圖1
  
  ____Oracle預(yù)編譯程序提供如下功能:
  
  ____能用六種通用的高級程序設(shè)計語言中的任何一種編寫應(yīng)用程序。
  
  ____遵循ANSI標準,在高級語言中嵌入SQL語句。
  
  ____可采用動態(tài)SQL方法,讓程序在運行時接受或構(gòu)造一個有效的SQL語句。
  
  ____實現(xiàn)Oracle內(nèi)部數(shù)據(jù)類型和高級語言數(shù)據(jù)類型之間的自動轉(zhuǎn)換。
  
  ____可通過在應(yīng)用程序中嵌入PL/SQL事物處理塊來改進性能。
  
  ____能在程序行和命令行上指定所需要的預(yù)編譯可選項,并可在預(yù)編譯的過程中改變它們的值。
  
  ____能全面檢查嵌入的SQL數(shù)據(jù)操縱語句和PL/SQL塊的文法和語義。
  
  ____可用SQL*Net并行存取多個地點的Oracle數(shù)據(jù)庫。
  
  ____可把數(shù)組作為輸入和輸出程序變量使用。
  
  ____能對應(yīng)用程序中的代碼段進行條件預(yù)編譯。
  
  ____提供了較強的異常處理功能。
  
  ____由此可見,通過預(yù)編譯程序與其它高級語言的結(jié)合,既可以利用SQL強有力的功能和靈活性為數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)提供強有力的手段,又可以充分利用高級語言自身在系統(tǒng)開發(fā)方面的優(yōu)勢,從而提供一個完備的基于Oracle數(shù)據(jù)庫應(yīng)用程序的開發(fā)解決方案。
  
  ____2.在VC中使用PRO*C
  
  ____每個PRO*C源文件一般由程序頭和程序體兩部分組成。程序頭包含宿主變量(SQL語句中所包含的變量)說明、通訊區(qū)定義和C外部表示符的說明等。程序體一般是由若干函數(shù)組成,這些函數(shù)內(nèi)含有SQL語句(以EXEC SQL起頭的語句)。
  
  ____PRO*C支持的數(shù)據(jù)類型包括:VARCHAR2(變長字符串)、NUMBER(二進制數(shù))、INTGER(有符號整數(shù))、FLOAT(浮點數(shù))、STRING(以NULL結(jié)尾的字符串)、VARNUM(變長二進制數(shù))、 LONG(變長字符串)、VARCHAR(變長字符串)、ROWID(二進制值)、DATE(定長日期/時間值 )、VARRAW(變長二進制數(shù)據(jù))、RAW(定長二進制數(shù)據(jù)) 、LONGRAW(變長二進制數(shù)據(jù))、UN SIGNED(無符號整數(shù))、LONGVARCHAR(變長字符串)、LONGVARRAW(變長二進制數(shù)據(jù))、CHA R(定長字符串)、CHARZ(C中定長以NULL結(jié)尾的字符串)、MLSLABEL(變長二進制數(shù)據(jù))。
  
  ____在PRO*C中不能使用‘l’或‘u’作詞尾或‘0x’作詞頭修飾常量;在SQL語句中使用單引號來定義字符串,用雙引號來定義非凡的或小寫字符的標識符(如表名等);SQL語句中不答應(yīng)使用C中的尋址、間接、位邏輯、復(fù)合賦值、?=、--、++、%、<<、>>操作符,并且用NOT、AND、OR、=來分別代替!、&&、、==。
  
  ____下面的程序是一個連接數(shù)據(jù)庫的PRO*C源程序例子。
  
  ____#include //聲明SQL通訊區(qū)
  
  ____#include
  
  ____#include
  
  ____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 :usernameIDENTIFIED BY :password USING :dbname;
  
  ____/*if (sqlca.sqlcode != 0) //顯式異常處理
  
  ____{
  
  ____AfxMessageBox("/n與 Oracle 數(shù)據(jù)庫連接失敗!");
  
  ____return;
  
  ____}*/
  
  ____}
  
  ____在VC中使用PRO*C時,先用PRO*C編寫所需的操作數(shù)據(jù)庫的子程序,再運行PRO*C預(yù)編譯程序把PRO*C源程序轉(zhuǎn)成相應(yīng)的.CPP源程序,將該程序插入到用戶工程文件中,并在需要對插入函數(shù)進行調(diào)用的模塊中說明函數(shù),然后就可以在此模塊中調(diào)用所需的函數(shù)。

  
  ____使用ODBC中間件訪問數(shù)據(jù)庫
  
  ____1.ODBC工作原理
  
  ____ODBC是Open Database Connect(開放數(shù)據(jù)庫互連)的簡稱,它是由Microsoft公司于1 991年提出的一個用于訪問數(shù)據(jù)庫的統(tǒng)一界面標準,是應(yīng)用程序和數(shù)據(jù)庫系統(tǒng)之間的中間件。它通過使用相應(yīng)應(yīng)用平臺上和所需數(shù)據(jù)庫對應(yīng)的驅(qū)動程序與應(yīng)用程序的交互來實現(xiàn)對數(shù)據(jù)庫的操作,避免了在應(yīng)用程序中直接調(diào)用與數(shù)據(jù)庫相關(guān)的操作,從而提供了數(shù)據(jù)庫的獨立性。
  
  ____ODBC主要由驅(qū)動程序和驅(qū)動程序治理器組成。驅(qū)動程序是一個用以支持ODBC函數(shù)調(diào)用的模塊(在WIN95下通常是一個DLL),每個驅(qū)動程序?qū)?yīng)于相應(yīng)的數(shù)據(jù)庫,當(dāng)應(yīng)用程序從基于一個數(shù)據(jù)庫系統(tǒng)移植到另一個時,只需更改應(yīng)用程序中由ODBC治理程序設(shè)定的與相應(yīng)數(shù)據(jù)庫系統(tǒng)對應(yīng)的別名即可。驅(qū)動程序治理器(包含在ODBC32.DLL中)可鏈接到所有ODBC 應(yīng)用程序中,它負責(zé)治理應(yīng)用程序中ODBC函數(shù)與DLL中函數(shù)的綁定。
  
  ____ODBC使用層次的方法來治理數(shù)據(jù)庫,在數(shù)據(jù)庫通信結(jié)構(gòu)的每一層,對可能出現(xiàn)依靠數(shù)據(jù)庫產(chǎn)品自身特性的地方,ODBC都引入一個公共接口以解決潛在的不一致性,從而很好地解決了基于數(shù)據(jù)庫系統(tǒng)應(yīng)用程序的相對獨立性,這也是ODBC一經(jīng)推出就獲得巨大成功的重要原因之一。
  
  ____從結(jié)構(gòu)上分,ODBC分為單束式和多束式兩類。
  
  ____單束式驅(qū)動程序
  
  圖2
  
  ____單束式驅(qū)動程序介于應(yīng)用程序和數(shù)據(jù)庫之間,像中介驅(qū)動程序一樣數(shù)據(jù)提供一個統(tǒng)一的數(shù)據(jù)訪問方式。
  
  ____當(dāng)用戶進行數(shù)據(jù)庫操作時,應(yīng)用程序傳遞一個ODBC函數(shù)調(diào)用給ODBC驅(qū)動程序治理器, 由ODBC API判定該調(diào)用是由它直接處理還是送交驅(qū)動程序執(zhí)行。
  
  ____可見,單束式驅(qū)動程序本身是一個數(shù)據(jù)庫引擎,由它直接可完成對數(shù)據(jù)庫的操作,盡管該數(shù)據(jù)庫可能位于網(wǎng)絡(luò)的任何地方。
  
  ____多束式驅(qū)動程序
  
  圖3
  
  ____多束式驅(qū)動程序負責(zé)在數(shù)據(jù)庫引擎和客戶應(yīng)用程序之間傳送命令和數(shù)據(jù),它本身并不執(zhí)行數(shù)據(jù)處理操作,而用于遠程操作的網(wǎng)絡(luò)通信協(xié)議的一個界面。
  
  ____前端應(yīng)用程序提出對數(shù)據(jù)庫處理的請求,該請求轉(zhuǎn)給ODBC驅(qū)動程序治理器,驅(qū)動程序治理器依據(jù)請求的情況,就地完成或傳給多束驅(qū)動程序。多束式驅(qū)動程序?qū)⒄埱蠓g為特定廠家的數(shù)據(jù)庫通信接口(如Oracle的SQLNet)所能理解的形式并交于接口去處理,接口把請求經(jīng)網(wǎng)絡(luò)傳送給服務(wù)器上的數(shù)據(jù)引擎。服務(wù)器處理完后把結(jié)果發(fā)回給數(shù)據(jù)庫通信接口 ,數(shù)據(jù)庫接口將結(jié)果傳給多束式ODBC驅(qū)動程序,再由驅(qū)動程序?qū)⒔Y(jié)果傳給應(yīng)用程序。
  
  ____2.在VC中使用ODBC
  
  ____Visual C++中提供了CDatabase、CRecordset、CRecordView、CDBException和CFie ldExchange五個類,這些類封裝了ODBC SDK函數(shù),從而使用戶可以無需了解SDK函數(shù)就可以很方便地操作支持ODBC的數(shù)據(jù)庫。
  
  ____CDatabase類封裝了與數(shù)據(jù)庫建立連接、控制事務(wù)的提交和回滾及執(zhí)行SQL語句的方法。
  
  ____CRecordset類封裝了大部分操縱數(shù)據(jù)庫的方法,包括瀏覽、修改記錄、控制游標移動、排序等操作。
  
  ____CRecordView類提供了與Recordset對象相連接的視圖,可以建立視中的控件與數(shù)據(jù)庫數(shù)據(jù)的對應(yīng),同時支持移動游標、修改記錄等操作。
  
  ____CDBException類提供了對數(shù)據(jù)庫操作的異常處理,可以獲得操作異常的相關(guān)返回代碼。
  
  ____CFieldExchange類提供了用戶變量與數(shù)據(jù)庫字段之間的數(shù)據(jù)交換,假如不需要使用自定義類型,將不用直接調(diào)用該類的函數(shù),MFC Wizard將自動為程序員建立鏈接。
  
  ____兩種方法的比較
  
  ____綜上所述,使用這兩種方法在Visual C++中都可以很方便地開發(fā)出基于Oracle數(shù)據(jù)庫的應(yīng)用程序,同時,這兩種方法又各有其優(yōu)缺點。ODBC由于有MFC強大的類庫支持而使得編程實現(xiàn)非常方便,同時可移植性也很強,在異構(gòu)數(shù)據(jù)庫之間移植也只需更改很少一部分程序。但是,由ODBC的實現(xiàn)機制我們可以看到,與PRO*C相比,應(yīng)用程序需要經(jīng)過ODBC驅(qū)動程序治理器和ODBC驅(qū)動程序兩層,才能和數(shù)據(jù)庫通信接口建立聯(lián)系,而PRO*C是直接與通信接口聯(lián)系,因此建立在ODBC上應(yīng)用程序的執(zhí)行效率會相對低一些。PRO*C具有執(zhí)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 马尔康县| 静海县| 靖州| 城口县| 普陀区| 安平县| 许昌市| 安阳市| 图片| 巩义市| 鲁山县| 革吉县| 青铜峡市| 哈巴河县| 乌鲁木齐市| 汤原县| 敦化市| 郓城县| 新干县| 车险| 南召县| 台中市| 青田县| 太谷县| 十堰市| 淳化县| 巴彦淖尔市| 广河县| 太原市| 霍州市| 长沙市| 安远县| 陆河县| 西平县| 奉贤区| 武汉市| 和平县| 保靖县| 太康县| 象山县| 靖江市|