首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle BLOB 欄位儲存多個檔案實戰:基於 ORADBI 的高效 C 語言 OCI 封裝方案

     編輯:Oracle 資料庫基礎

方案背景與 ORADBI 簡介

  • BLOB 儲存二進位資料,原生 OCI 代碼冗長易錯。
  • ORADBI: 基於 OCI 的 C 語言 API 封裝庫,開源免費 (保留版權),持續維護 1 年+,支援多檔案單欄位寫入/讀出。
  • 下載:CSDN 下載鏈結

前置需求

  1. Oracle 9i/10g Client (10g 僅需 Instant Client)。
  2. ORADBI 庫原始碼與範例程式。

資料庫表結構

CREATE TABLE TEST (
  BM      VARCHAR2(10),
  NAME    VARCHAR2(100),
  BIRTH   DATE,
  DATA    BLOB
) TABLESPACE USERS PCTFREE 10 INITRANS 1 MAXTRANS 255
STORAGE (INITIAL 64K MINEXTENTS 1 MAXEXTENTS UNLIMITED);

核心程式碼片段解析

1. 定義待寫入檔案陣列

const char* arrLobFiles[] = {
  "E:\\eBookLib\\...\\Cryptography in C and C++_SourceCode.rar",
  "E:\\eBookLib\\...\\Algorithms For Compiler Design.chm",
  // ... 共 12 個檔案
};

2. 連線與 SQL 準備

ORA_connection_create(&con, "CHEUNG", "mineusr", "minepwd", OCI_THREADED|OCI_OBJECT, FALSE, &err);
ORA_sqlstmt_create(&stmt, con,
  "INSERT INTO TEST (BM,NAME,BIRTH,DATA) VALUES (:bm,:name,:birth,:blob)", -1, 0, &err);

3. 綁定參數與 LOB 檔案流

ORA_sqlstmt_bind(stmt, ":bm", ODT_TEXT, 0, &p[0], &err);
ORA_sqlstmt_bind(stmt, ":name", ODT_TEXT, 100, &p[1], &err);
ORA_sqlstmt_bind(stmt, ":birth", ODT_DATE, 0, &p[2], &err);

ORADBI_InBind inbind;
ORA_inbind_lobfile_init(&inbind, 0, arrLobFiles, 
                        sizeof(arrLobFiles)/sizeof(arrLobFiles[0]), &err);
ORA_sqlstmt_bind_lob(stmt, ":blob", 0, &inbind, 0, &p[3], &err);

4. 設定標量參數並執行


ORA_param_set_string(p[0], "2008", -1, &err);
ORA_param_set_string(p[1], "BeiJing", -1, &err);
ORA_datetime_create(&dt, 1);
ORA_param_set_datetime(p[2], dt, &err);
ORA_datetime_free(dt);

ORA_sqlstmt_execute(stmt, MOD_DEFAULT, 0, &err);
ORA_connection_commit(con, &err);

5. 資源釋放


ORA_inbind_lobfile_free(&inbind);
ORA_sqlstmt_free(stmt);
ORA_connection_free(con);

關鍵技術優勢

  • 串流式寫入: 避免將大檔案完整載入記憶體,直接從檔案系統流式傳輸至資料庫 LOB。
  • 多檔案聚合: 單次 INSERT 將多個獨立檔案連續寫入同一 BLOB 欄位,應用層自行定義分隔/索引邏輯。
  • 極簡 API: 核心流程僅 30 行 C 代碼,對比原生 OCI 數百行。
  • 記憶體安全: 內建 _CrtDumpMemoryLeaks 偵測洩漏。

擴展應用方向

  • 讀取端:對應 ORA_outbind_lobfile_init 將 BLOB 還原為多個檔案。
  • 中介軟體整合:封裝為共享庫供 Java/Python/Node.js 透過 FFI 調用。
  • 雲端遷移:批次將檔案系統非結構化資料遷移至 Oracle BLOB/物件儲存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved