首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 客戶端程式三:封裝連線模組實現程式碼復用

     編輯:MySQL 資料庫相關知識

為什麼要封裝連線代碼?

在客戶端程式一、二中,連線與斷線代碼直接寫在 main() 裡,導致每個新程式都得複製貼上,修改錯誤或改進功能時更得逐一更新。客戶端程式三(client3)採用模組化封裝策略:將通用的連線/斷線邏輯提取到獨立的 common.c 與 common.h,供多個程式共享。好處顯而易見:

  • 修正錯誤或優化只需改一處,重新編譯連結即可惠及所有呼叫者。
  • 支援單一程式中多次連線/斷線,代碼更清晰。
  • 為跨版本相容性(如 MySQL 3.22 前後 mysql_real_connect() 參數不同)提供統一適配層。

核心封裝函式:do_connect() 與 do_disconnect()

do_connect() 封裝了 mysql_init()、mysql_real_connect() 及錯誤處理,參數與 mysql_real_connect() 幾乎相同(不需傳連線控制代碼),成功回傳 MYSQL*,失敗列印錯誤並回傳 NULL。do_disconnect() 則單純呼叫 mysql_close(),但預留了未來擴充清理邏輯的彈性。

錯誤報告的進一步封裝:print_error()

原始代碼中到處散落 fprintf(stderr, ...)、mysql_errno()、mysql_error(),閱讀困難且格式不一。引入 print_error(conn, "context") 統一錯誤輸出,優勢:

  • 即使 conn 為 NULL(如 mysql_init() 失敗)也能妥善處理。
  • 統一格式,日後改寫日誌、加入除錯中斷點只需動一個函式。
  • 減少複製貼上帶來的不一致與錯誤。

跨版本相容性範例

利用 MYSQL_VERSION_ID 巨集,do_connect() 可在編譯時自動適配舊版 mysql_real_connect()(無 db_name 參數):若偵測到舊版,改呼叫 mysql_select_db() 切換資料庫,失敗則關閉連線回傳 NULL。這讓所有使用 do_connect() 的程式自動獲得跨版本支援,無需各自修改。

主程式 client3.c 的簡化

引入 common.h 後,main() 僅剩核心邏輯:

MYSQL *conn = do_connect(host, user, pass, db, port, sock, flag);
if (!conn) exit(1);
/* 業務操作... */
do_disconnect(conn);

連線細節完全隱藏,專注於資料庫操作本身。

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