在C語言開發中,連接MySQL資料庫不一定非要依賴ODBC驅動。MySQL提供了原生的C API庫(libmysql),開發者可以直接通過3306端口與資料庫服務器進行通訊。本文將通過一個完整的實戰範例,展示如何使用MySQL C API實現資料庫連接、數據插入等核心操作,並重點說明庫版本匹配、錯誤處理等關鍵細節。
#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、電池電量)uplog()函數展示了標準的MySQL C API操作流程:
mysql_init(NULL)分配並初始化MYSQL對象mysql_real_connect()使用默認端口MYSQL_PORT(3306)連接服務器mysql_select_db()切換到目標數據庫sprintf()構建參數化INSERT語句(實際項目建議使用預處理語句防止SQL注入)mysql_query()發送SQL語句mysql_close()關閉連接並釋放資源parseLogs()函數負責從文件中解析特定格式的日誌數據(|KEY#VALUE|格式),使用strtok()進行分割,並通過strupr()實現不區分大小寫的鍵值匹配。解析成功需提取全部8個字段,否則返回錯誤。
main()函數處理命令行參數(host、user、password、logfile),調用解析與上傳流程,實現完整的日誌自動上傳功能。
mysql_stmt_prepare()等預處理接口mysql_set_character_set())本範例展示了C語言通過MySQL原生API操作資料庫的完整流程,代碼結構清晰,適合作為嵌入式設備日誌上傳、數據采集系統的參考實現。實際部署時請根據業務場景完善異常處理、連接池管理及安全防護機制。