本文展示如何使用 C 語言配合 MySQL C API,將格式化文本文件中的數據逐行解析並批量插入資料庫。核心思路:fgets 讀取行 → strtok 分割字段 → sprintf 構建 SQL → mysql_real_query 執行插入。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
MYSQL mysql;
/* 封裝插入邏輯 */
void insert(char *a, char *b, char *c) {
int t;
char query[400];
memset(query, 0, 400);
/* 根據實際表結構調整 SQL */
sprintf(query, "INSERT INTO EnglishWord4(Words, Translate, Num) VALUES('%s', '%s', '%s')", a, b, c);
printf("正在執行: %s\n", query);
t = mysql_real_query(&mysql, query, (unsigned int)strlen(query));
if (t) {
printf("插入異常: %s\n", mysql_error(&mysql));
} else {
printf("添加成功\n");
}
}
int main() {
FILE *fp;
char buff[300];
fp = fopen("englishword4.txt", "r");
if (fp == NULL) {
printf("Fail to open\n");
exit(1);
}
mysql_init(&mysql);
/* 連接資料庫:主機、用戶、密碼、數據庫、端口、Socket、標誌 */
if (!mysql_real_connect(&mysql, "localhost", "root", NULL, "English", 0, NULL, 0)) {
printf("Error connecting to database: %s\n", mysql_error(&mysql));
return 1;
} else {
printf("Connected...\n");
}
char *p;
char a[20], b[200], c[10];
int i, length;
while (fgets(buff, 300, fp) != NULL) {
/* 去除換行符 */
if (buff[strlen(buff)-1] == '\n') buff[strlen(buff)] = '\0';
/* 假設文件格式:單字#音標#解釋#編號 */
strcpy(a, strtok(buff, "#"));
i = 0;
while ((p = strtok(NULL, "#"))) {
if (i == 1) strcpy(b, p); /* 解釋 */
if (i == 2) strcpy(c, p); /* 編號 */
i++;
}
/* 處理編號末尾可能的換行/回車 */
length = strlen(c);
if (length >= 2) c[length-2] = '\0';
insert(a, b, c);
/* 清空緩衝區供下一輪使用 */
bzero(a, sizeof(a));
bzero(b, sizeof(b));
bzero(c, sizeof(c));
}
mysql_close(&mysql);
fclose(fp);
return 0;
}
文本文件 englishword4.txt 每行格式:
a#[ei]#art. 一;任一;每一#1 able#['eibl]#adj. 能#1 about#[ə'baut]#prep. 關於#1 ...
程序運行後,可通過 MySQL 客戶端查詢表 EnglishWord4 確認數據已成功導入。




MYSQL 結構體並檢查連接返回值。mysql_stmt_prepare)。mysql_real_query 返回值,利用 mysql_error 獲取詳細信息。