首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2010 C++ 連接 Oracle 數據庫:OCI/OCCI 完整配置與代碼示例

     編輯:程式設計綜合問答

方案選擇

方案優點缺點
OCCI (Oracle C++ Call Interface)面向對象、C++ 風格、官方支持需安裝 Instant Client SDK、版本綁定
OCI (Oracle Call Interface)底層 C API、性能最高、功能全代碼冗長、手動資源管理
ODBC通用、跨數據庫性能一般、需配置 DSN
第三方庫簡化封裝、現代 C++依賴第三方維護

OCCI 快速入門 (推薦)

1. 環境準備

  • 下載 Oracle Instant Client 12.2+ (Basic + SDK)。
  • 解壓至 D:\oracle\instantclient_12_2。
  • VS2010 專案屬性:
    • VC++ 目錄 → 包含目錄:添加 $(ORACLE_HOME)\sdk\include
    • VC++ 目錄 → 庫目錄:添加 $(ORACLE_HOME)\sdk\lib\msvc
    • 鏈接器 → 輸入 → 附加依賴項:oraocci12.lib
  • 系統環境變量 PATH 添加 $(ORACLE_HOME),TNS_ADMIN 指向 tnsnames.ora 目錄。

2. 完整代碼示例

#include <occi.h>
#include <iostream>
using namespace oracle::occi;
using namespace std;

int main() {
    Environment *env = Environment::createEnvironment(Environment::DEFAULT);
    Connection *conn = nullptr;
    Statement *stmt = nullptr;
    ResultSet *rs = nullptr;
    
    try {
        // 連接字符串:用戶/密碼@TNS服務名
        conn = env->createConnection("scott", "tiger", "ORCL");
        
        stmt = conn->createStatement("SELECT empno, ename, sal FROM emp WHERE deptno = :1");
        stmt->setInt(1, 10);
        rs = stmt->executeQuery();
        
        while (rs->next()) {
            cout << rs->getInt(1) << "\t" 
                 << rs->getString(2) << "\t" 
                 << rs->getDouble(3) << endl;
        }
    } catch (SQLException &ex) {
        cerr << "Error: " << ex.getMessage() << endl;
    } finally {
        if (rs) stmt->closeResultSet(rs);
        if (stmt) conn->terminateStatement(stmt);
        if (conn) env->terminateConnection(conn);
        Environment::terminateEnvironment(env);
    }
    return 0;
}

3. 關鍵點

  • 資源管理:嚴格按逆序釋放 ResultSet → Statement → Connection → Environment。
  • 參數綁定:使用 :1, :2 占位符防止注入。
  • 異常處理:捕獲 SQLException。
  • 編碼:確保客戶端 NLS_LANG 與數據庫一致(如 SIMPLIFIED CHINESE_CHINA.ZHS16GBK)。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved