- 相關(guān)推薦
Solaris下PRO*C和OCI程序設計分析與比較
摘要文章對Solaris平臺下,開(kāi)發(fā)基于Oracle數據庫的C程序的兩種方法——PRO*C和OCI進(jìn)行了研究,詳細分析了這兩種方法的開(kāi)發(fā)流程,給出了較為具體的應用程序例子,并對兩者的性能進(jìn)行了比較。
關(guān)鍵詞Solaris,Oracle,PRO*C,OCI
1引言
數據庫在軟件開(kāi)發(fā)中的應用越來(lái)越廣泛,其中,Oracle可說(shuō)是性能最強大、最穩定的數據庫之一,大量的軟件開(kāi)發(fā)選擇了Oracle。在開(kāi)發(fā)語(yǔ)言的選擇上,C語(yǔ)言以其靈活、高效吸引了大批的軟件開(kāi)發(fā)人員。這兩者的強強聯(lián)合也必具有較高的性能,在實(shí)際中有廣泛的應用。這就是PRO*C和OCI程序設計。
Oracle常常應用在服務(wù)器中,Solaris又是服務(wù)器的首選平臺,因此,本文主要介紹PRO*C和OCI程序設計在Solaris平臺上的應用和實(shí)現,對在Windows平臺和Linux平臺上的應用和實(shí)現也可作為參考。本文所采用的開(kāi)發(fā)環(huán)境為Solaris2.8、Oracle8.1.7。
2PRO*C程序設計
PRO*C是Oracle提供的應用程序專(zhuān)用開(kāi)發(fā)工具,它以C語(yǔ)言為宿主語(yǔ)言,能在C程序中嵌入SQL語(yǔ)句,進(jìn)行數據庫操作。這種嵌入式的SQL語(yǔ)句容易掌握,適合初學(xué)者。
2.1設置開(kāi)發(fā)環(huán)境
(1)C編譯器
Solaris系統中常用的C語(yǔ)言編譯器是GCC,是GNU組織的免費C編譯器,一般Linux版本中缺省都安裝有GCC,UNIX系統中有的并不自帶,因此需要手動(dòng)安裝,本文所采用的GCC版本為3.2。
(2)PRO*C預編譯器
PRO*C使用預編譯技術(shù),預編譯器將源程序中的SQL語(yǔ)句轉換為標準的Oracle庫函數調用,從而生成C源程序,再經(jīng)C編譯器編譯、鏈接后生成可執行文件。這個(gè)預編譯器是Oracle自帶的。
(3)C語(yǔ)言頭文件和函數庫。
Oracle安裝程序將這些文件安裝在$ORACLE_HOME/precomp目錄下。
2.2開(kāi)發(fā)PRO*C程序
(1)說(shuō)明SQL通訊區
SQL通訊區用來(lái)記錄執行每一個(gè)嵌入SQL語(yǔ)句的狀態(tài)信息,通過(guò)在函數體外使用下列語(yǔ)句實(shí)現:
#include
(2)聲明宿主變量,即C變量
這些變量是應用程序與Oracle通信的橋梁,應用程序的輸入數據通過(guò)C變量傳遞給Oracle,反之,Oracle的輸出數據又通過(guò)C變量傳遞給應用程序。舉例如下:
EXECSQLBEGINDECLARESECTION;
charszUsername[16];
VARCHARvarPassword[16];
char*szStmt1="CREATETABLEUSERS(USERNAMEVARCHAR2(15)NOTNULL,PASSWORD
VARCHAR2(15)NOTNULL)";
char*szStmt2="SELECTPASSWORDFROMUSERSWHEREUSERNAME=’chen’";
EXECSQLENDDECLARESECTION;
值得注意的是:在SQL語(yǔ)句中使用C變量時(shí),前面需加冒號,例如上面的變量應表示為:szUsername。其中,VARCHAR為C擴展數據類(lèi)型,預編譯時(shí),PRO*C預編譯器將它擴展為一個(gè)C結構類(lèi)型struct{
unsignedshortlen;
unsignedchararr[16];
}varNo;
在SQL語(yǔ)句中使用VARCHAR類(lèi)型變量時(shí),只需指出結構名稱(chēng)varPassword就可,但在C語(yǔ)句中使用VARCHAR類(lèi)型變量時(shí),必須具體說(shuō)明所操作變量的結構元素名稱(chēng)是varPassword.len還是varPassword.arr。另外,如果用VARCHAR類(lèi)型變量做函數參數的話(huà),只能用指針形式。
(3)連接數據庫
EXECSQLCONNECT:username/password@DBname;
通過(guò)sqlca.sqlcode的值來(lái)判斷連接數據庫成是否功。
(4)執行SQL語(yǔ)句(分為靜態(tài)SQL語(yǔ)句和動(dòng)態(tài)SQL語(yǔ)句)
靜態(tài)SQL語(yǔ)句是在開(kāi)發(fā)應用程序時(shí)就已經(jīng)明確了的數據庫操作,如:
EXECSQLSELECTpasswordINTO:szPasswordFROMUSERSWHEREusername=:szUsername;
動(dòng)態(tài)SQL語(yǔ)句是在運行時(shí)由外部數據提供的,不能直接在C程序中嵌入SQL語(yǔ)句,但可以調用放在一個(gè)字符串變量里的SQL語(yǔ)句,最簡(jiǎn)單的方法是:EXECSQLEXECUTEIMMEDIATE:szStmt1;但這樣執行的SQL語(yǔ)句不能實(shí)現查詢(xún),實(shí)現查詢(xún)可用下列方法:
EXECSQLPREPAREselect_stmtFROM:szStmt2;
EXECSQLEXECUTEselect_stmtINTO:szPassword;
如果不再需要已準備好的語(yǔ)句,應釋放:EXECSQLDEALLOCATEPREPAREselect_stmt;
(5)提交或回滾所做的數據庫處理,并退出數據庫
回滾:EXECSQLROLLBACKWORKRELEASE;
提交:EXECSQLCOMMITWORKRELEASE;
注意語(yǔ)句中的RELEASE選項,它要求關(guān)閉所有打開(kāi)的游標,之后斷開(kāi)與數據庫服務(wù)器的連接。
2.3生成可執行文件
在Solaris平臺下可通過(guò)命令方式對PRO*C源程序進(jìn)行預編譯,下列命令只列出了最常用的預編譯選項:#prociname=example.cINCLUDE=pathCODE=ANSI_CMODE=ANSICPP_SUFFIX=cc
SQLCHECK=SEMANTICSUSERID=username/password@DBname
預編譯后的example.cc文件就可以當作普通的C源文件來(lái)進(jìn)行處理了。
#gcc-oexampled–I.-I/oracle/product/8.1.7/precomp/publicexample.cc
最終生成的exampled文件就是我們的可執行文件。
3OCI程序設計
OCI(OracleCallInterface)是由頭文件和庫函數等組成的一套Oracle數據庫應用
【Solaris下PRO*C和OCI程序設計分析與比較】相關(guān)文章:
新準則下資產(chǎn)減值的比較分析03-24
C語(yǔ)言程序設計 (一)12-26
多媒體課件制作-《C程序設計》03-08
I2C總線(xiàn)在uClinux操作系統下的驅動(dòng)程序設計11-22
公司治理模式的比較和發(fā)展趨勢分析03-19
語(yǔ)言符號任意性和象似性的分析比較11-30
中美投資準則的比較與分析03-18
英漢被動(dòng)結構比較分析03-12