ODBC(Open Database Connectivity)是一個用于數據庫通信的標準接口,由于ODBC提供了統一的接口,使得應用程序可以通過同一套源碼連接不同的數據庫。
Oracle數據庫作為廣泛使用的企業級數據庫,也有其對應的ODBC驅動程序。下面介紹如何使用ODBC連接Oracle數據庫。
首先需要安裝Oracle的ODBC驅動程序,可以從Oracle官網下載相應的驅動程序并進行安裝。
1. 下載ODBC驅動程序
官網下載地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
選擇對應的版本進行下載以及安裝
2. 配置ODBC數據源
進入"控制面板"->"管理工具"->"ODBC數據源",選擇"系統DSN"選項卡
選擇"Oracle in instantclient_11_2",點擊"配置"按鈕
填寫Oracle數據庫的連接信息,例如:
Data Source Name:Oracle_test
Description:連接測試Oracle數據庫
TNS Service Name: test
User Name:test
Password:****(數據庫密碼)
點擊"測試連接"按鈕,測試是否可以成功連接Oracle數據庫
3. 連接Oracle數據庫
使用C++語言編寫代碼進行ODBC連接Oracle數據庫。例如:
#include <sql.h>
#include <sqlext.h>
int main()
{
/* ODBC初始化 */
SQLHENV env;
SQLRETURN ret;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3_80, SQL_IS_INTEGER);
/* ODBC連接Oracle */
SQLHDBC dbconn;
SQLCHAR* dsn = (SQLCHAR*)"Oracle_test";
SQLCHAR* user = (SQLCHAR*)"test";
SQLCHAR* password = (SQLCHAR*)"123456";
SQLCHAR conn_str[1024];
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbconn);
ret = SQLConnect(dbconn, dsn, SQL_NTS, user, SQL_NTS, password, SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
printf("ODBC connect Oracle failed\n");
return 1;
}
/* ODBC查詢Oracle */
SQLHSTMT stmt;
SQLCHAR sql_cmd[1024] = "SELECT * FROM emp";
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbconn, &stmt);
ret = SQLExecDirect(stmt, sql_cmd, SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
printf("ODBC execute SQL failed\n");
return 1;
}
/* ODBC獲取查詢結果 */
SQLINTEGER empno;
SQLCHAR ename[20];
while (ret = SQLFetch(stmt) == SQL_SUCCESS)
{
SQLGetData(stmt, 1, SQL_C_LONG, &empno, 0, nullptr);
SQLGetData(stmt, 2, SQL_C_CHAR, ename, sizeof(ename), nullptr);
printf("empno: %d, ename: %s\n", empno, ename);
}
/* ODBC釋放資源 */
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbconn);
SQLFreeHandle(SQL_HANDLE_DBC, dbconn);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
上述代碼中,ODBC初始化的部分是由SQLAllocHandle和SQLSetEnvAttr函數實現的。其中,SQL_ATTR_ODBC_VERSION參數指定了ODBC的版本號為3.8。
ODBC連接Oracle的部分是由SQLConnect函數實現的,其中dsn參數是ODBC數據源名稱,user和password參數分別是Oracle數據庫的用戶名和密碼。
ODBC查詢Oracle的部分是由SQLExecDirect函數實現的,其中sql_cmd參數是要執行的SQL語句。
ODBC獲取查詢結果的部分是由SQLFetch和SQLGetData函數實現的,其中SQLGetString函數獲取了empno和ename兩個字段的值,并將其輸出到控制臺。
最后,ODBC釋放資源使用了SQLFreeHandle函數。
通過上述步驟和代碼,我們可以連接Oracle數據庫,并實現數據的查詢。