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

C語言連接MySQL實戰範例:直接使用原生API操作資料庫

     編輯:關於C

前言

在C語言開發中,連接MySQL資料庫不一定非要依賴ODBC驅動。MySQL提供了原生的C API庫(libmysql),開發者可以直接通過3306端口與資料庫服務器進行通訊。本文將通過一個完整的實戰範例,展示如何使用MySQL C API實現資料庫連接、數據插入等核心操作,並重點說明庫版本匹配、錯誤處理等關鍵細節。

核心代碼解析

1. 環境配置與結構體定義

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>

#pragma comment(lib, "libmysql.lib")

首先引入必要的頭文件,其中mysql/mysql.h是MySQL C API的核心頭文件。通過#pragma comment指令鏈接libmysql.lib靜態庫(Windows環境下)。注意:libmysql.dll版本必須與目標MySQL服務器版本相匹配,否則可能出現連接失敗或運行時錯誤。

定義兩個關鍵結構體:

  • DBINFO:存儲資料庫連接參數(主機、用戶名、密碼、數據库名)
  • LOGS:存儲待上傳的硬體日誌數據(序列號、MAC地址、BIOS版本、EC版本、觸控固件版本、OA Key、電池電量)

2. 資料庫連接與操作流程

uplog()函數展示了標準的MySQL C API操作流程:

  1. 初始化:mysql_init(NULL)分配並初始化MYSQL對象
  2. 建立連接:mysql_real_connect()使用默認端口MYSQL_PORT(3306)連接服務器
  3. 選擇數據庫:mysql_select_db()切換到目標數據庫
  4. 構建SQL語句:使用sprintf()構建參數化INSERT語句(實際項目建議使用預處理語句防止SQL注入)
  5. 執行查詢:mysql_query()發送SQL語句
  6. 資源釋放:mysql_close()關閉連接並釋放資源

3. 日誌文件解析邏輯

parseLogs()函數負責從文件中解析特定格式的日誌數據(|KEY#VALUE|格式),使用strtok()進行分割,並通過strupr()實現不區分大小寫的鍵值匹配。解析成功需提取全部8個字段,否則返回錯誤。

4. 主程序入口

main()函數處理命令行參數(host、user、password、logfile),調用解析與上傳流程,實現完整的日誌自動上傳功能。

關鍵注意事項

  • 庫版本一致性:客戶端庫(libmysql)版本需與服務器版本兼容
  • 錯誤處理:每個API調用後都應檢查返回值,並在失敗時正確釋放資源
  • SQL注入風險:示例代碼直接拼接SQL,生產環境務必使用mysql_stmt_prepare()等預處理接口
  • 字符集處理:涉及中文數據時需設置連接字符集(mysql_set_character_set())

總結

本範例展示了C語言通過MySQL原生API操作資料庫的完整流程,代碼結構清晰,適合作為嵌入式設備日誌上傳、數據采集系統的參考實現。實際部署時請根據業務場景完善異常處理、連接池管理及安全防護機制。

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