OCI(Oracle Call Interface)介面編程(oracle)

來源:互聯網
上載者:User

OCI(Oracle Call Interface)是ORACLE公司開發的一個應用程式開發工具,是一個通過訪問Oracle資料庫的伺服器,控制各類SQL語句的執行,進而建立應用程式的的應用程式介面(API)。它支援SQL所有的資料定義,資料操作,查詢,交易管理等操作,支援C和C++的資料類型,調用,文法和語義。它提供了一組可對Oracle資料庫進行存取的介面子常式(函數)。
OCI程式實質上就是用進階語言寫的程式,其特點是內部含有對OCI子函數庫的調用,通過在第三代程式設計語言(如C語言)中進行調用可達到存取ORACLE資料庫的目的。

OCI基本編程流程:

1,建立和初始化OCI環境。OCI環境即OCI函數的工作環境,在調用其他函數之前必須先調用OCIInitialize()和OCIEnvInit()函數建立和初始化OCI環境,其他OCI函數要在這個環境中才能執行。
swordOCIEnvInit(OCIEnv**envhpp,ub4mode,size_txtramemsz,dvoid**usrmempp);
參數:
envhp:環境控制代碼的指標
mode:初始化模式,OCI_DEFAULT,OCI_THREADED等
xtramemsz:在應用程式中需要分配的記憶體的大小
usrmempp:返回指向剛指派的使用者記憶體的指標
2,申請控制代碼
控制代碼是指向OCI庫所分配的記憶體地區的指標,該記憶體地區中的資料由OCI庫維護,應用程式可通過控制代碼訪問其中的資料。
一個控制代碼可以用來存放上下文或串連資訊(如環境或服務上下文控制代碼).它是由連結庫管理,可以簡化編程。利用OCIAtrrtGet()和OCIAtrrSet()這些擷取或設定屬性的OCI介面可以訪問到控制代碼中存放資訊。
需要申請的控制代碼一般有以下幾類:
伺服器控制代碼OCIServer,控制代碼類型OCI_HTYPE_SERVER
錯誤控制代碼OCIError,用於捕獲OCI錯誤資訊,控制代碼類型OCI_HTYPE_ERROR
事務控制代碼OCISession,控制代碼類型OCI_HTYPE_SESSION
上下文控制代碼OCISvcCtx,控制代碼類型OCI_HTYPE_SVCCTX
SQL語句控制代碼OCIStmt,控制代碼類型OCI_HTYPE_STMT
需要設定的控制代碼屬性:
伺服器執行個體:
控制代碼類型OCI_HTYPE_SVCCTX,屬性類型OCI_ATTR_SERVER
串連資料的使用者名稱:
控制代碼類型OCI_HTYPE_SESSION,屬性類型OCI_ATTR_USERNAME
使用者密碼:
控制代碼類型OCI_HTYPE_SESSION,屬性類型OCI_ATTR_PASSWORD
事務:
控制代碼類型OCI_HTYPE_SVCCTX,屬性類型OCI_ATTR_SESSION
OCIHandleAlloc()——分配控制代碼,返回剛初始化的控制代碼指標
swordOCIHandleAlloc(CONSTdvoid*parenth,dvoid**hndlpp,ub4type,size_txtramem_sz,dvoid**usrmempp);
參數:
parenth:新申請控制代碼的父控制代碼,一般為OCI環境控制代碼
hndlpp:申請的新控制代碼
type:OCI控制代碼類型
xtramem_sz:為控制代碼分配記憶體的大小
usrmempp:申請到的記憶體塊指標
3,串連伺服器,建立會話
OCIServerAttach(m_srvhp,m_errhp,(text*)"",strlen(""),OCI_DEFAULT);建立與指定伺服器的串連
參數:
text*:類型變數為空白,表示串連預設資料庫服務
OCI_DEFAUL:表示應用程式的操作模式為阻塞模式,在這種方式下,只有當OCI調用完成後才將控制權返回給用戶端應用程式。
這裡,只介紹單使用者,單串連的情況:
OCILogon(envhp,errhp,&svchp,(text*)"hr",nameLen,(text*)"hr",passwdLen,(text*)"oracledb",dbnameLen);
使用了這種方法之後,servicecontext,server,andusersessionhandles都是唯讀,不能通過OCIAttrSet()對其屬性進行改寫。
使用OCILogon()後,在程式結束時,必須使用OCILogoff()來終止它。
4,執行SQL語句並處理資料
5,結束會話斷開資料庫連接
使用OCISessionEnd()刪除每一個使用者會話。
OCILogoff(m_svchp,m_errhp);
6,斷開與資料來源的串連,釋放控制代碼
OCIServerDetach()斷開與資料來源的串連:
OCIServerDetach(m_srvhp,m_errhp,OCI_DEFAULT);
OCIHandleFree()釋放所有已指派的控制代碼
OCIHandleFree――釋放控制代碼
swordOCIHandleFree(dvoid*hndlp,ub4type);
參數:
*hndlp:要釋放的控制代碼
ub4type:控制代碼類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.