<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Solaris下PRO*C和OCI程序設(shè)計分析與比較

    時間:2024-08-18 19:51:44 計算機畢業(yè)論文 我要投稿
    • 相關(guān)推薦

    Solaris下PRO*C和OCI程序設(shè)計分析與比較

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

    3OCI程序設(shè)計
    OCI(OracleCallInterface)是由頭文件和庫函數(shù)等組成的一套Oracle數(shù)據(jù)庫應(yīng)用

    【Solaris下PRO*C和OCI程序設(shè)計分析與比較】相關(guān)文章:

    新準則下資產(chǎn)減值的比較分析03-24

    C語言程序設(shè)計 (一)12-26

    多媒體課件制作-《C程序設(shè)計》03-08

    I2C總線在uClinux操作系統(tǒng)下的驅(qū)動程序設(shè)計11-22

    公司治理模式的比較和發(fā)展趨勢分析03-19

    語言符號任意性和象似性的分析比較11-30

    中美投資準則的比較與分析03-18

    英漢被動結(jié)構(gòu)比較分析03-12

    論獨立學(xué)院 C語言程序設(shè)計教學(xué)改革與實踐03-27

    主站蜘蛛池模板: 亚洲国产主播精品极品网红| 真实国产乱子伦精品视频| 国产在线观看一区精品| 国产国产精品人在线观看| 四虎永久在线精品国产馆V视影院| 青青草国产精品久久久久| 久久精品午夜一区二区福利| 欧美日韩精品系列一区二区三区国产一区二区精品 | 99精品无人区乱码在线观看| 下载天堂国产AV成人无码精品网站| 国产成人精品a视频一区| 久久精品国产影库免费看| 国产精品日韩欧美一区二区三区 | 精品国产一区二区三区色欲 | 国产精品久久久久9999高清| 久热这里只有精品视频6| 亚洲视频在线精品| 亚洲国产成人a精品不卡在线| 精品无码人妻久久久久久| 99热亚洲精品6码| 久久精品视频网| 国产精品一区在线播放| 51午夜精品免费视频| 成人区人妻精品一区二区不卡网站| 精品国产福利在线观看| 久久精品国产亚洲精品2020 | 欧美成人精品欧美一级乱黄一区二区精品在线| 日韩精品一区二区三区四区| 久久精品国产一区二区三区日韩| 欧美大片日韩精品| 欧美一区二区精品| 国产成人高清精品免费观看| 国产乱码伦精品一区二区三区麻豆| 国产成人无码精品久久久免费| 99久久精品国产综合一区| 99久久www免费人成精品| 99久久精品免费看国产| 国产亚洲精品AA片在线观看不加载| 国产综合成人色产三级高清在线精品发布| 国产精品嫩草影院久久| 精品久久久久一区二区三区|