在C語言中,與數據庫的鏈接是常見的操作。Oracle數據庫也是企業級應用中常用的數據庫之一。本文將介紹如何在C語言中測試Oracle數據庫的鏈接。
在使用C語言鏈接Oracle數據庫之前,需要確保已經正確安裝Oracle Instant Client。在Linux系統下的安裝可參考以下命令:
sudo apt-get install libaio1 sudo apt-get install unzip unzip instantclient-basic-linux.x64-18.5.0.0.0dbru.zip -d /opt/ unzip instantclient-sdk-linux.x64-18.5.0.0.0dbru.zip -d /opt/
其中,instantclient-basic-linux.x64-18.5.0.0.0dbru.zip和instantclient-sdk-linux.x64-18.5.0.0.0dbru.zip為Oracle官網下載的安裝包,-d后面的路徑為解壓路徑。
接下來就可以進入C語言編寫測試代碼。以下代碼為一個測試程序,包括了鏈接數據庫、查詢數據和關閉鏈接的操作:
#include#include #include int main() { OCIEnv *envhp; OCIError *errhp; OCIServer *srvhp; OCISession *usrhp; OCIStmt *stmthp; OCIDefine *defhp; char *host = "localhost"; // 主機名 char *user = "test"; // 用戶名 char *password = "test"; // 密碼 int port = 1521; // 端口 char *db_name = "test"; // 數據庫名 char query[1000] = "SELECT * FROM test_table"; OCIInitialize(OCI_DEFAULT, NULL, NULL, NULL, NULL); OCIEnvCreate(&envhp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL); OCIHandleAlloc(envhp, (void **) &errhp, OCI_HTYPE_ERROR, 0, NULL); OCIHandleAlloc(envhp, (void **) &srvhp, OCI_HTYPE_SERVER, 0, NULL); OCIServerAttach(srvhp, errhp, (OraText *) host, strlen(host), OCI_DEFAULT); OCIHandleAlloc(envhp, (void **) &usrhp, OCI_HTYPE_SESSION, 0, NULL); OCISessionBegin(srvhp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT); OCIHandleAlloc(envhp, (void **) &stmthp, OCI_HTYPE_STMT, 0, NULL); OCIStmtPrepare(stmthp, errhp, (OraText *) query, strlen(query), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIStmtExecute(srvhp, stmthp, errhp, 1, 0, NULL, NULL, OCI_DEFAULT); int id; char name[20]; while (OCIStmtFetch2(stmthp, errhp, 1, OCI_DEFAULT, 0, OCI_DEFAULT) == OCI_SUCCESS) { OCIAttrGet(stmthp, OCI_HTYPE_STMT, &id, 0, OCI_ATTR_ROWID, errhp); OCIAttrGet(stmthp, OCI_HTYPE_STMT, &name, 0, OCI_ATTR_NAME, errhp); printf("id: %d, name: %s\n", id, name); } OCIStmtRelease(stmthp, errhp, NULL, 0, OCI_DEFAULT); OCISessionEnd(srvhp, errhp, usrhp, OCI_DEFAULT); OCIServerDetach(srvhp, errhp, OCI_DEFAULT); OCIHandleFree(envhp, OCI_HTYPE_SERVER); OCIHandleFree(envhp, OCI_HTYPE_SESSION); OCIHandleFree(envhp, OCI_HTYPE_ERROR); OCIHandleFree(envhp, OCI_HTYPE_ENV); return 0; }
以上代碼中,host、user、password、port和db_name分別為數據庫鏈接所需的基本信息。query為查詢語句,包含了從test_table表中選取全部數據的操作。
在編譯執行代碼之前,需要在編譯命令中鏈接Oracle Instant Client庫,命令如下:
gcc -o test test.c -Wall -I/opt/instantclient_18_5/ -L/opt/instantclient_18_5/ -locci -lclntsh
其中,/opt/instantclient_18_5/為Oracle Instant Client的安裝路徑,-locci和-lclntsh為鏈接庫。
執行測試程序后,即可得到查詢出的數據。
以上就是C語言中測試Oracle鏈接的步驟和代碼實現。通過以上代碼示例,我們可以體會到C語言操作Oracle數據庫的便捷之處,同時對于C語言的相關知識也有更加清晰的認識。
上一篇c調用php函數返回值
下一篇c 管理oracle