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

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

用VC開發(fā)基于ORACLE數(shù)據(jù)庫方法

2024-08-29 13:41:33
字體:
來源:轉載
供稿:網(wǎng)友

  1. 引言
  Oracle 公司自1979 年推出基于SQL 標準的關系數(shù)據(jù)庫產(chǎn)品到1997 年版本8 的推出,ORACLE 數(shù)據(jù)庫以其支持大數(shù)據(jù)庫、多用戶的高性能事務處理,對業(yè)界各項工業(yè)標準的支持,完整的安全和完整性控制,支持分布式數(shù)據(jù)庫和分布處理, 具有可移植性、可兼容性和可連接性等突出優(yōu)點倍受用戶喜愛,根據(jù)IDG1992 年全球UNIX 數(shù)據(jù)庫的市場報告,ORACLE 占市場銷售量的50%。而在客戶端的開發(fā)工具方面,Visual C++ 也因其強大的功能和高度的靈活性等特點深受廣大程序員的喜愛,因此本文旨在介紹使用Visual C++ 開發(fā)基于ORACLE 數(shù)據(jù)庫應用程序的兩種方法。
  
  2. 使用PRO*C 開發(fā)數(shù)據(jù)庫應用
  2.1 PRO*C 工作原理
  PRO 系列是ORACLE 公司提供的在第三代高級程序設計語言中嵌入SQL 語句來訪問數(shù)據(jù)庫的一套預編譯程序,包括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal 和PRO*PL/I 六種。程序員用相應的高級語言編寫嵌入SQL 語句的PRO 源程序(若用C 語言則稱為PRO*C 源程序)后運行相應的預編譯程序,把嵌入的SQL 語句轉換為標準的ORACLE 調(diào)用并生成目標源程序,即純高級語言格式的源程序,然后就可以將這些源程序加入用戶的程序中調(diào)用,其處理過程如下圖。
  
  ORACLE 預編譯程序提供如下功能:
  
  ⑴能用六種通用的高級程序設計語言中的任何一種編寫應用程序。
  
  ⑵遵循ANSI 標準,在高級語言中嵌入SQL 語句。
  
  ⑶可采用動態(tài)SQL 方法,讓程序在運行時接受或構造一個有效的SQL 語句。
  
  ⑷實現(xiàn)ORACLE 內(nèi)部數(shù)據(jù)類型和高級語言數(shù)據(jù)類型之間的自動轉換。
  
  ⑸可通過在應用程序中嵌入PL/SQL 事物處理塊來改進性能。
  
  ⑹能在程序行和命令行上指定所需要的預編譯可選項,并可在預編譯的過程中改變它們的值。
  
  ⑺能全面檢查嵌入的SQL 數(shù)據(jù)操縱語句和PL/SQL 塊的文法和語義。
  
  ⑻可用SQL*Net 并行存取多個地點的ORACLE 數(shù)據(jù)庫。
  
  ⑼可把數(shù)組作為輸入和輸出程序變量使用。
  
  ⑽能對應用程序中的代碼段進行條件預編譯。
  
  ⑾提供了較強的異常處理功能。
  
  由此可見,通過預編譯程序與其它高級語言的結合,既可以利用SQL 強有力的功能和靈活性為數(shù)據(jù)庫應用系統(tǒng)的開發(fā)提供強有力的手段,又可以充分利用高級語言自身在系統(tǒng)開發(fā)方面的優(yōu)勢,從而提供一個完備的基于ORACLE 數(shù)據(jù)庫應用程序的開發(fā)解決方案。
  
  2.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 結尾的字符串)、VARNUM( 變長二進制數(shù))、LONG( 變長字符串)、VARCHAR( 變長字符串)、ROWID( 二進制值)、DATE( 定長日期/ 時間值)、VARRAW( 變長二進制數(shù)據(jù))、RAW( 定長二進制數(shù)據(jù)) 、LONGRAW( 變長二進制數(shù)據(jù))、UNSIGNED( 無符號整數(shù))、LONGVARCHAR( 變長字符串)、LONGVARRAW( 變長二進制數(shù)據(jù))、CHAR( 定長字符串)、CHARZ(C 中定長以NULL 結尾的字符串)、MLSLABEL( 變長二進制數(shù)據(jù))。
  
  在PRO*C 中不能使用'l' 或'u' 作詞尾或'0x' 作詞頭修飾常量;在SQL 語句中使用單引號來定義字符串,用雙引號來定義非凡的或小寫字符的標識符( 如表名等);SQL 語句中不答應使用C 中的尋址、間接、位邏輯、復合賦值、?=、-、++、%、<<、>> 操作符并且用NOT、AND、OR、= 代替!、&&、、==。
  
  下面的程序是一個聯(lián)結數(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("/n與Oracle數(shù)據(jù)庫連接失敗!");
  return;
  }*/
  }
  
  在VC 中使用PRO*C 時,先用PRO*C 編寫所需的操作數(shù)據(jù)庫的子程序,再運行PRO*C 預編譯程序把PRO*C 源程序轉成相應的CPP 源程序,將該程序插入到用戶工程文件中并在需要對插入函數(shù)進行調(diào)用的模塊中說明函數(shù),然后就可以在此模塊中調(diào)用所需的函數(shù)。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清苑县| 修文县| 垣曲县| 永登县| 巫山县| 尼勒克县| 沙湾县| 六枝特区| 池州市| 探索| 抚宁县| 英吉沙县| 讷河市| 海晏县| 丹棱县| 湖口县| 延寿县| 饶阳县| 曲松县| 莒南县| 富平县| 兰溪市| 香格里拉县| 双辽市| 邻水| 宜昌市| 岳阳市| 贡觉县| 济阳县| 齐河县| 襄垣县| 五指山市| 白玉县| 桦南县| 日土县| 梅河口市| 庐江县| 东乡县| 利津县| 曲阜市| 海安县|