| 函式 | 用途 |
mysql_init() | 初始化 MYSQL 結構體 |
mysql_real_connect() | 建立資料庫連線 |
mysql_query() | 執行 SQL (非查詢) |
mysql_store_result() | 取得完整結果集 (緩衝模式) |
mysql_fetch_row() | 逐列讀取資料 |
mysql_fetch_field() | 取得欄位中繼資料 |
mysql_free_result() | 釋放結果集 |
mysql_close() | 關閉連線 |
完整範例 (Console App)
#include
#include
#include
int main() {
MYSQL* conn = mysql_init(NULL);
if (!conn) return 1;
// 連線
if (!mysql_real_connect(conn, "localhost", "root", "your_pass", "test", 3306, NULL, 0)) {
fprintf(stderr, "連線失敗: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 建表
if (mysql_query(conn, "CREATE TABLE mytable (time DATETIME, s1 CHAR(6), s2 CHAR(11), s3 INT, s4 INT)")) {
fprintf(stderr, "建表失敗: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 插入
if (mysql_query(conn, "INSERT INTO mytable VALUES('2000-03-10 21:01:30','Test','MySQLTest',2000,3)")) {
fprintf(stderr, "插入失敗: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 查詢
if (mysql_query(conn, "SELECT * FROM mytable")) {
fprintf(stderr, "查詢失敗: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
MYSQL_RES* res = mysql_store_result(conn);
int nFields = mysql_num_fields(res);
MYSQL_FIELD* fields = mysql_fetch_fields(res);
// 列印欄位名
for (int i = 0; i < nFields; ++i) printf("%s\t", fields[i].name);
printf("\n");
// 列印資料
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
for (int i = 0; i < nFields; ++i)
printf("%s\t", row[i] ? row[i] : "NULL");
printf("\n");
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
效能優化關鍵
- 使用預處理語句 (
mysql_stmt_prepare):減少 SQL 解析開銷,防 SQL 注入
- 批次插入:單次
INSERT ... VALUES (...), (...), ... 寫入多筆
- 連線池:應用層維護連線池,避免頻繁
connect/close
- 適當索引:查詢欄位建立 B-Tree 索引
- 調整 my.cnf:
key_buffer_size, table_cache, sort_buffer_size 依記憶體調大
跨平台移植提示
- 原始碼無需修改即可在 Linux/Unix 編譯 (連結
-lmysqlclient)
- Windows 下亦可使用
MyODBC 驅動搭配標準 ODBC API,犧牲些效能換取程式碼通用性
總結
MySQL C API 以極致效能、零授權成本、跨平台能力,成為 Windows NT 平台高併發資料庫應用的最佳選擇。配合合理的連線池、預處理語句與索引設計,輕鬆支撐百萬級資料量與高併發存取。
- 上一篇文章: MFC 自繪視窗框架實現換膚功能:CSkinWin + CSkinButton 完整方案
- 下一篇文章: MFC 顯示 JPG/GIF/BMP 圖片的最佳實踐:IPicture + CPicture 封裝類完整解析
Copyright ©
程式碼之家 All Rights Reserved