C語言是一種廣泛應用于系統編程和嵌入式開發的編程語言,雖然C語言在計算機領域中的應用已經相當久遠了,但在現如今的IT應用領域,C語言依然有其廣泛的應用,尤其是在連接數據庫方面,比如連接Oracle數據庫。
Oracle數據庫是一種高檔的、復雜的以及功能強大的關系型數據庫系統。連接Oracle數據庫的過程主要分為兩個階段,第一個階段是使用一個適當的驅動程序連接到數據庫,第二個階段是通過該連接來執行各種數據庫操作。
連接Oracle數據庫時,C語言一般使用ODBC(開放數據庫連接)或JDBC(JAVA數據庫連接)驅動程序,其中ODBC驅動程序更為常用。以下是具體的連接方法:
#include#include #include #include #include SQLHDBC hdbc; //數據庫連接句柄 //連接數據庫 int connectDB(char* dbName, char* user, char* pwd) { SQLRETURN ret; SQLCHAR retStr[1000] = {0}; SQLSMALLINT retStrLen; SQLCHAR connectStr[120] = {0}; SQLCHAR* ptr = NULL; SQLCHAR* dsn = (SQLCHAR*)"OracleODBC-13"; //DSN SQLCHAR* uid = (SQLCHAR*)user; SQLCHAR* passwd = (SQLCHAR*)pwd; sprintf_s((char*)connectStr, "DSN=%s;UID=%s;PWD=%s", dsn, uid, passwd); ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){ printf("\n%s AllocHandle Failed\n", __FUNCTION__); return -1; } ret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){ printf("\n%s SQLSetEnvAttr Failed\n", __FUNCTION__); SQLFreeHandle(SQL_HANDLE_ENV, henv); return -1; } ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){ printf("\n%s AllocHandle Failed\n", __FUNCTION__); SQLFreeHandle(SQL_HANDLE_ENV, henv); return -1; } ret = SQLDriverConnect(hdbc,NULL, connectStr, SQL_NTS,retStr, sizeof(retStr),&retStrLen,SQL_DRIVER_NOPROMPT); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO){ printf("\n%s SQLDriverConnect Failed - %u:%s\n", __FUNCTION__, ret, retStr); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); return -1; } return 0; }
上述代碼中,輸入參數為dbName、user和pwd分別代表數據庫名、用戶名和密碼。其中dsn是一個在ODBC中預定義好的數據源連接的名稱。 數據源名稱定義在ODBC規范中的數據源配置中。連接Oracle數據方式是通過還調用SQLDriverConnect函數,而這個函數包含了一些參數:連接句柄、DSN、用戶名、密碼、長度、緩存返回字符串和返回字符串的長度。如此,在C語言中連接Oracle數據庫即可成功實現。
除了連接數據庫之外,我們還可以進行各種數據庫操作,比如查詢、插入、更新、刪除等,這些操作在C語言中都可以很好的實現,例如:
int sql_exec(char* sql) { SQLHSTMT stmt; SQLRETURN ret; SQLLEN len; char buf[1024]; SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &stmt); ret = SQLExecDirect(stmt, (SQLCHAR*)sql, SQL_NTS); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { SQLFreeHandle(SQL_HANDLE_STMT, stmt); return -1; } while (SQLFetch(stmt) != SQL_NO_DATA) { SQLGetData(stmt, 1, SQL_C_CHAR, buf, sizeof(buf), &len); printf("%s\n", buf); } SQLFreeHandle(SQL_HANDLE_STMT, stmt); return 0; }
上述代碼是一個對Oracle數據庫查詢的例子,其中我們調用了SQLExecDirect函數來執行對應的SQL語句,然后通過SQLFetch獲取查詢到的數據。查詢出來數據之后,可以進一步進行后續處理,再利用SQLFreeHandle函數釋放資源即可。
總之,通過C語言連接Oracle數據庫,我們可以輕松實現各種操作,尤其是一些需要高速處理大量數據的場景,具有很高的實用價值和現實意義。