在C編程中,操作數據庫是非常常見的任務。而Oracle數據庫也是被廣泛應用的關系型數據庫之一。在進行開發應用程序的時候,我們需要不斷地對數據庫進行修改和更新數據。本文將會介紹如何使用C語言的API與Oracle數據庫進行交互,實現更新數據庫的操作。
首先,我們需要建立一個與Oracle數據庫連接的會話(Session)。我們需要定義出連接數據庫的信息并且告訴OCI驅動程序連接的方式:
OCISvcCtx* pSvcCtx; OCIEnv* pEnv; OCIError* pErr; OCIStmt* pStmt; // 語句指針 // 連接數據庫信息 const char* szUserName = "test"; const char* szPassword = "test123"; const char* szSID = "ORCL"; const char* szConnectString = "jdbc:oracle:thin:@" szSID ""; // 分配內存空間 OCIEnvCreate(&pEnv, OCI_OBJECT, NULL, NULL, NULL, NULL, 0, NULL); // 創建會話 OCIHandleAlloc(pEnv, (void**)&pSvcCtx, OCI_HTYPE_SVCCTX, 0, NULL); OCIHandleAlloc(pEnv, (void**)&pErr, OCI_HTYPE_ERROR, 0, NULL); OCIHandleAlloc(pSvcCtx, (void**)&pStmt, OCI_HTYPE_STMT, 0, NULL); OCIAttrSet(pSvcCtx, OCI_HTYPE_SVCCTX, (void*)szConnectString, strlen(szConnectString), OCI_ATTR_CONNECTION_STR, pErr); OCIAttrSet(pSvcCtx, OCI_HTYPE_SVCCTX, (void*)szUserName, strlen(szUserName), OCI_ATTR_USERNAME, pErr); OCIAttrSet(pSvcCtx, OCI_HTYPE_SVCCTX, (void*)szPassword, strlen(szPassword), OCI_ATTR_PASSWORD, pErr); int iError = OCILogon(pEnv, pErr, &pSvcCtx, szUserName, strlen(szUserName), szPassword, strlen(szPassword), szSID, strlen(szSID)); if (iError != OCI_SUCCESS) { printf("數據庫連接失??! \n"); return -1; }
接下來我們需要創建一個SQL語句來更新數據庫。例如,在一個學生成績表中,我們需要把李明的數學成績修改為90分,代碼如下:
char* szSql = "UPDATE T_STUDENT SET MATH = 90 WHERE NAME = '李明'"; int nLen = strlen(szSql); OCIStmtPrepare(pStmt, pErr, szSql, nLen, OCI_NTV_SYNTAX, OCI_DEFAULT);
在這段代碼中,我們定義了一個字符串變量szSql,這個變量的值為更新數據庫的SQL語句。然后我們調用OCIStmtPrepare函數來準備這個SQL語句,以便可以在執行時直接使用。
接下來,我們需要綁定變量,并執行SQL語句。代碼如下:
// 定義變量 char szName[255]; int nMath = 90; // 綁定參數 OCIParamBind(pStmt, OCI_ATTR_PARAM, pErr, (void*)&szName, sizeof(szName), OCI_PARAM_IN, SQLT_STR, NULL, 0, NULL, 0); OCIParamBind(pStmt, OCI_ATTR_PARAM, pErr, (void*)&nMath, sizeof(nMath), OCI_PARAM_IN, SQLT_INT, NULL, 0, NULL, 0); // 執行SQL語句 OCIStmtExecute(pSvcCtx, pStmt, pErr, 1, 0, NULL, NULL, OCI_COMMIT_ON_SUCCESS);
在這段代碼中,我們定義了兩個變量,分別為學生姓名和數學成績。然后我們通過OCIParamBind函數將這兩個變量綁定到了SQL語句中的參數上。最后調用OCIStmtExecute函數來執行SQL語句。
在執行完SQL語句之后,我們需要進行一些清理工作。這里我們需要關閉會話并釋放已分配的內存空間。代碼如下:
OCILogoff(pSvcCtx, pErr); OCIHandleFree(pStmt, OCI_HTYPE_STMT); OCIHandleFree(pErr, OCI_HTYPE_ERROR); OCIHandleFree(pSvcCtx, OCI_HTYPE_SVCCTX); OCIHandleFree(pEnv, OCI_HTYPE_ENV);
在這段代碼中,我們通過調用OCILogoff來關閉會話,釋放已分配的內存空間。這樣我們的數據庫更新操作就完成了。
上一篇app php服務器端