思维导图
代码
#include <myhead.h>
int main() {
FILE* fp = fopen("dict.txt", "r");
if (NULL == fp) {
fprintf(stderr, "文件打开失败\n");
return -1;
}
char line[512]; // 用于存储每行文本的字符数组
char word[256]; // 存储单词的字符串
char meaning[256]; // 存储意思的字符串
int lineCount = 0; // 记录读取的行数
// 创建或连接到SQLite数据库
sqlite3* db = NULL;
if (sqlite3_open("./word_database.db", &db) != SQLITE_OK) {
fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
return -1;
}
// 创建表格
const char* sql = "CREATE TABLE IF NOT EXISTS words (id INT PRIMARY KEY AUTOINCREMENT, word char, meaning char);";
char* errmsg = NULL;
if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK) {
fprintf(stderr, "创建表格失败: %s\n", errmsg);
sqlite3_close(db);
return -1;
}
while (fgets(line, sizeof(line), file)) {
// 使用 strtok() 来分割每行文本
char* token = strtok(line, " "); // 使用三个空格作为分隔符
if (token) {
strncpy(word, token, sizeof(word));
token = strtok(NULL, " "); // 继续查找下一个分割符
if (token) {
strncpy(meaning, token, sizeof(meaning));
//printf("Line %d: Word: %s, Meaning: %s\n", lineCount + 1, word, meaning);
printf("正在导入...\n");
// 插入数据到数据库
char insertSQL[512];
snprintf(insertSQL, sizeof(insertSQL), "INSERT INTO words (word, meaning) VALUES ('%s', '%s');", word, meaning);
if (sqlite3_exec(db, insertSQL, 0, 0, 0) != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db));
}
}
}
lineCount++;
}
printf("导入完成\n");
fclose(file);
sqlite3_close(db); // 关闭数据库连接
return 0;
}