在進行C和Oracle數據庫連接時,連接串是非常重要的部分。C語言中,我們可以使用Oracle提供的OCI接口來連接Oracle數據庫。此外,沒有理由不使用連接串的兩個重要原因是:連接串提供的一個方便的方式來指定數據庫,用戶名和密碼等細節信息,這是僅靠函數調用實現的額外控制。那么,我們該如何使用連接串來連接Oracle數據庫呢?接下來我們詳細說明:
首先,Oracle連接串由8個元素組成,其語法如下:
[//]host[:port][/service_name][:server][/instance_name]
下面對各元素進行解釋:
- //:表示該服務器是一個遠程數據庫服務器;
- host:用于指定數據庫所在的機器名稱或IP地址;
- port:連接到遠程數據庫服務器的端口號。默認端口號1521;
- service_name:表示在該主機上運行的ORACLE實例名;
- server:服務名;
- instance_name:實例名;
下面我們舉個實際連接的例子,假設我們有一個Oracle數據庫運行在IP地址為192.168.0.1的機器上,信息如下:
- 主機名稱:dbhost1
- 數據庫服務名:ORCL
- 監聽端口號:1521
那么連接串應該為:
"192.168.0.1:1521/ORCL"
下面是使用OCI函數來創建一個數據庫連接:
OCIEnv *envhp; /* OCI environment handle */ OCIServer *srvhp; /* OCI server handle */ OCIError *errhp; /* OCI error handle */ OCISession *sesnhp; /* OCI session handle */ text *username = (text *)"scott"; /* database user name */ text *password = (text *)"tiger"; /* database user password */ text *connect_string = (text *)"192.168.0.1:1521/ORCL"; /* connection string */ /* Initialize OCI environment */ OCIEnvCreate(&envhp, (ub4)OCI_DEFAULT, (dvoid *)0, (dvoid * (*)(dvoid *,size_t))0, (dvoid * (*)(dvoid *,dvoid *,size_t))0, (void (*)(dvoid *,dvoid *))0, (size_t)0, (dvoid **)0); /* Create OCI server handle */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, (ub4)OCI_HTYPE_SERVER, (size_t)0, (dvoid **)0); /* Create OCI error handle */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, (ub4)OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0); /* Attach the server handle to the server */ OCIServerAttach(srvhp, errhp, (text *)connect_string, strlen((char *)connect_string), (ub4)OCI_DEFAULT); /* Create OCI session handle */ OCIHandleAlloc((dvoid *)envhp, (dvoid **)&sesnhp, (ub4)OCI_HTYPE_SESSION, (size_t)0, (dvoid **)0); /* Set the username and password */ OCIAttrSet((dvoid *)sesnhp, (ub4)OCI_HTYPE_SESSION, (dvoid *)username, (ub4)strlen((char *)username), OCI_ATTR_USERNAME, errhp); OCIAttrSet((dvoid *)sesnhp, (ub4)OCI_HTYPE_SESSION, (dvoid *)password, (ub4)strlen((char *)password), OCI_ATTR_PASSWORD, errhp); /* Begin Session */ OCISessionBegin(envhp, errhp, sesnhp, (ub4)OCI_CRED_RDBMS, (ub4)OCI_DEFAULT); /* Set the session in the server */ OCIAttrSet((dvoid *)srvhp, (ub4)OCI_HTYPE_SERVER, (dvoid *)sesnhp, (ub4)0, (ub4)OCI_ATTR_SESSION, errhp);
如上例所示,我們首先創建一個OCI環境句柄(OCIEnv),然后用該句柄創建一個OCI服務器句柄 (OCIServer)和一個OCI錯誤句柄 (OCIError)。接著,我們調用 OCIServerAttach 函數來連接遠程ORACLE服務器。如果連接成功,連接字符串包含的數據庫服務名 ORCL 將被賦給服務器句柄。然后,我們創建一個OCI會話句柄(OCISession)并將其與USR 和PWD參數指定的用戶和密碼相關聯,接著調用 OCISessionBegin 函數開始會話。最后,我們通過 OCIAttrSet 函數將會話句柄(OCISession)和上下文句柄(OCIServer)相關聯,最后我們就可以使用OCIStmtPrepare、OCIStmtExecute、OCIFetch 等函數執行相應的SQL語句了。
總之,在使用OCI連接Oracle數據庫時,連接串是一個非常重要的部分。我們需要按照上述語法規則正確配置連接串。然后使用OCI接口函數來創建連接、會話等句柄,獲取需要的SQL語句執行結果。希望本文對于想要學習OCI連接Oracle的開發者們有所幫助。