在使用C語言開發時,經常需要連接Oracle數據庫。在連接Oracle數據庫之前,需要首先進行配置操作。下面將詳細介紹在C語言中如何進行Oracle連接配置。
一般而言,進行Oracle連接配置的時候需要以下四個變量:
OCIEnv *envhp;//環境句柄指針 OCIServer *srvhp;//服務句柄指針 OCIError *errhp;//錯誤句柄指針 OCISession *sesshp;//會話句柄指針
首先需要通過OCIEnvCreate函數來創建一個環境句柄,我們可以通過一個宏來初始化環境句柄,具體方法如下:
static OCIEnv *envhp;//定義環境句柄 OCIEnvCreate(&envhp,//輸出參數,環境句柄指針 (ub4)(OCI_OBJECT|OCI_EVENTS), //模式,必須是OCI_OBJECT (dvoid *)0,//封裝通信錯誤處理程序定位的上下文句柄。 (dvoid *(*)(dvoid *,size_t))0,//客戶機分配向下的函數指針(用于Oracle向下的內存分配需要) (dvoid *(*)(dvoid *, dvoid*, size_t))0,//客戶機釋放向下的函數指針(用于Oracle向下的內存釋放需要) (dvoid (*)(dvoid *, dvoid *))0,//上下文釋放函數指針 (size_t)0, //(size_t)OCI_OBJECT,/*子對象類型*/ (dvoid **)0 ); if(!envhp) return NULL;
envhp用來存放Oracle的上下文信息,可以被session句柄和srvhp句柄共享,多個session可以共享同一個envhp句柄,多個 srvhp 也可以共享同一個 envhp 句柄。
接下來是如何連接到服務器,需要使用到srvhp,同時需要建立一個TCPS連接池,具體代碼如下:
static OCIServer *srvhp = NULL; static OCIError *errhp = NULL; if (!srvhp) { OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, (dvoid **)0); //分配指針srvhp OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, (dvoid **)OCI_HTYPE_ERROR, 0, (dvoid **)0);//分配指針errh } OCISvcCtx *svchp = NULL; OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, 0, (dvoid **)0); //連接參數配置 char connectStr[] = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.96.140.74)(PORT=3482))(CONNECT_DATA=(SID=SLDEV)))"; ub4 connectlength = strlen(connectStr); //在服務器端和客戶端設置相應的連接屬性,用戶名以及密碼 char username[] = "HR"; char password[]= "hr123"; ub4 usernamelen = strlen(username); ub4 passwordlen = strlen(password); if (OCILogon(envhp, errhp, &svchp, (OraText *)username, usernamelen, (OraText *)password, passwordlen, (OraText *)connectStr, connectlength)) { fprintf(stderr, "Logon Error : %s\n", errhp); return NULL; }
在OCILogon函數中,需要設置用戶名、密碼和服務名,其中服務名也可以是Oracle的tns名。通過此函數可以建立與Oracle數據庫的連接,并且session通過svchp進行管理。
上面代碼中,我們通過OCILogon實現服務器連接以及驗證,獲取ConnectionString,來設置OCILogon的第8個參數,實現連接到Oracle數據庫。連接成功后,便可進行一系列操作,例如查詢數據庫中的數據等。
以上就是使用C語言進行Oracle連接配置的主要步驟,希望對開發者們有所幫助。