目录
作业:将dict.txt中的内容导入到数据库中
注意:
-
导入后检查解释意思是否完整,双词性
-
中间有空格的单词
-
o'clock
代码
#include<stdio.h>
#include<sqlite3.h>
#include<string.h>
#include<stdlib.h>
void do_insert(sqlite3 *db,char *word,char *mean); //插入数据
int main(int argc, const char *argv[])
{
FILE* fp=fopen("./dict.txt","r");//打开文件
if (NULL==fp)
{
perror("fopen:");
printf("文件打开失败\n");
return -1;
}
printf("fopen success\n") ;
//打开数据库
sqlite3 *db;
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");
//创建一个表格
char* sql = "create table if not exists dict (word char,mean 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");
//定义存放信息的数组
char buf[128]="";
char word[64]="",mean[64]="";
//char *p=NULL;
//char *wordp=NULL;
//char *meanp=NULL;
char *res=NULL;
while (1)
//while(fgets(buf,sizeof(buf),fp)!=NULL)
{
bzero(buf,sizeof(buf));
bzero(word,sizeof(word));
bzero(mean,sizeof(mean));
if((res=fgets(buf,sizeof(buf),fp))==NULL)
//if (res==NULL)
{
printf("读取结束\n");
break;
}
char *p=buf;
char *wordp=word;
char *meanp=mean;
while (*p!=' ' || *(p+1)!=' ')//单词部分
{
if (*p=='\'') // '单引号
{
*wordp++ = '\'';
p++;
continue;
}
*wordp++ = *p++;
//printf("%c\n",*p);
}
while(*p==' ')p++; //跳过空格
while (*p!='\n') //翻译部分
{
*meanp++ = *p++;
}
do_insert(db,word,mean);
}
//关闭数据库
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;
}
void do_insert(sqlite3 *db,char *word,char *mean) //插入数据
{
char sql[128];
sprintf(sql, "insert into dict values(\"%s\",'%s')", word,mean);
//char* sql = "insert into stu values(1,"zhangsan",99);" ;
char* errmsg = NULL;
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
return ;
}
//printf("insert success\n");
}