一、代码
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
void do_insert (sqlite3* db,char word[],char explain[])
{
char sql[128]="";
sprintf(sql,"insert into dict values(\"%s\",\"%s\")",word,explain);
char* errmsg = NULL;
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ do_insert:%s\n", __LINE__, errmsg);
return ;
}
printf("do_insert success\n");
}
int main(int argc, const char *argv[])
{
//打开数据库
sqlite3* db = NULL;
if(sqlite3_open("./dict.db", &db) != SQLITE_OK)
{
printf("err_code:%d\n", sqlite3_errcode(db));
printf("errmsg:%s\n", sqlite3_errmsg(db));
fprintf(stderr, "__%d__ sqlite3_open failed\n", __LINE__);
return -1;
}
printf("sqlite3_open success\n");
//执行sql语句
#if 0
int sqlite3_exec(
sqlite3* db, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *arg, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
#endif
//创建一个表格
char* sql = "create table if not exists dict (wold char,word meaning char);" ;
char* errmsg = NULL;
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
return -1;
}
printf("create table success\n");
//打开字典文件
FILE* fd = fopen("./dict.txt","r");
if(fd == NULL)
{
perror("fopen");
return -1;
}
printf("打开字典文件成功\n");
//开始循环读取写入
char buf[128]; //存一行的内容
char word[128]; //存单词内容
char explain[128]; //存解释内容
char *res;
while(1)
{
bzero(buf,sizeof(buf));
bzero(word,sizeof(word));
bzero(explain,sizeof(explain));
//每次读取一行,并将一行内容存入buf中
res = fgets(buf,sizeof(buf),fd);
if(res == NULL)
{
printf("全部写入完毕\n");
break;
}
//以空格的方式分割单词和解释
char *q = buf;
strcpy(word,strtok(q," ")); //第一次读到单词空格后,并存入word字符组
strcpy(explain,strtok(NULL,"\n")); //第二次读到文件结尾,并存入explain数组
//判断是否单词之间有空格
char copy[128] = "";
strcpy(copy,explain+2);
char *p = strtok(copy," ");
while(*p != '\0')
{
//判断分离出来的是否全是字母
if(*p > 0 && *p < 127)
{
p++;
}
else //如果含有中文则退出
{
break;
}
}
//如果全是英文,则进行分离,将英文拼接到前面word中
if(*p == '\0')
{
word[strlen(word)] = ' ';
strcat(word,strtok(explain," "));
strcpy(explain,strtok(NULL,"\r"));
}
do_insert(db,word,explain);
printf("%s\n",word);
printf("%s\n",explain);
}
//关闭数据库
if(sqlite3_close(db) != SQLITE_OK)
{
printf("err_code:%d\n", sqlite3_errcode(db));
printf("errmsg:%s\n", sqlite3_errmsg(db));
fprintf(stderr, "__%d__ sqlite3_close failed\n", __LINE__);
return -1;
}
printf("sqlite3_close success\n");
return 0;
}
二、执行结果