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

C 語言嵌入式 SQL (ESQL) 入門:以 DB2 為例

     編輯:關於C語言

嵌入式 SQL 基本結構

將 SQL 語句嵌入 C 代碼,通過預編譯器處理。關鍵標記:EXEC SQL 開頭,分號結尾。

完整範例:查詢員工姓名

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "util.h" 
#include <sqlca.h> 

EXEC SQL INCLUDE SQLCA; // 定義 SQLCA 通訊區 

int main() { 
    EXEC SQL BEGIN DECLARE SECTION; 
    char firstname[13];   // 宿主變量:接收查詢結果 
    char userid[9];       // 宿主變量:連接用戶 
    char passwd[19];      // 宿主變量:密碼 
    EXEC SQL END DECLARE SECTION; 

    EXEC SQL CONNECT TO sample USER :userid USING :passwd; // 連接數據庫 

    EXEC SQL SELECT FIRSTNME INTO :firstname 
        FROM employee WHERE LASTNAME = 'JOHNSON'; 

    printf("First name = %s\n", firstname); 

    EXEC SQL CONNECT RESET; // 斷開連接 
    return 0; 
}

關鍵組件解析

組件作用關鍵點
EXEC SQL INCLUDE SQLCA引入 SQL 通訊區結構體sqlca.sqlcode 判斷執行狀態(0 成功,<0 錯誤,>0 警告)
DECLARE SECTION聲明宿主變量作用域只有此區變量可被 SQL 引用,前綴 : 区分
CONNECT TO建立數據庫會話需實例已啟動;支持 USER :var USING :var 動態認證
SELECT ... INTO :var單行查詢結果綁定宿主變量多行結果需用游標(DECLARE CURSOR/OPEN/FETCH/CLOSE)
CONNECT RESET釋放連接資源程序退出前必調用

預編譯流程

  1. db2 prep sample.sqc bindfile → 生成 .c 文件與綁定文件
  2. db2 bind sample.bnd → 綁定數據庫包
  3. gcc sample.c -o sample -ldb2 → 編譯鏈接
  4. 運行 ./sample

多行查詢:游標模式

EXEC SQL DECLARE c1 CURSOR FOR 
    SELECT FIRSTNME, LASTNAME FROM employee WHERE DEPT = :dept; 
EXEC SQL OPEN c1; 
while (1) { 
    EXEC SQL FETCH c1 INTO :fn, :ln; 
    if (sqlca.sqlcode == 100) break; // SQLCODE 100 = NOT FOUND 
    printf("%s %s\n", fn, ln); 
} 
EXEC SQL CLOSE c1;

常見錯誤與調試

  • 宿主變量未聲明:必須在 DECLARE SECTION 內。
  • 類型不匹配:C 類型需與 SQL 類型兼容(如 char[n] 對應 VARCHAR)。
  • SQLCODE 未檢查:每條 SQL 後檢查 sqlca.sqlcode,非零即錯誤/警告。
  • 預編譯器指令換行:長 SQL 用反斜杠 \ 換行。

總結

ESQL 讓 C 程序以類似原生語法操作關係數據庫,核心在於宿主變量作為數據橋樑、SQLCA 狀態監控、預編譯器轉換。掌握單行查詢、游標循環、動態 SQL 三種模式即可覆蓋 90% 場景。本文基於 IBM DB2 ESQL 風格整理,其他數據庫(Oracle Pro*C、PostgreSQL ECPG)語法大同小異。

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