用到sqlite3_open ,在就是对数据库进行增删改查的功能,
创建或打开一个数据库==》创建一个数据表==》在把需要拷贝到数据库中的文件打开==》在拿到所有数据并保存在定义的数组中==》在根据数据类型,把单词和翻译分开存储到两个变量里面,再用sprintf拼接起来==》最后更具格式存入进去
#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
int sq_insert(sqlite3* db,FILE* );//插入
int sq_delete(sqlite3* db);//删除
int sq_select(sqlite3* db);//查询
int sq_update(sqlite3* db);//修改
int main(int argc, const char *argv[])
{
//打开数据库
sqlite3* db = NULL;
if(sqlite3_open("./wordsq.db",&db)!=SQLITE_OK)
{
fprintf(stderr,"sqlite_open=%d %s __%d__\n",\
sqlite3_errcode(db),sqlite3_errmsg(db),__LINE__);
return -1;
}
printf("打开成功!\n");
//创建一个数据表
char sql[128] = "create table if not exists stu (word char ,mean char)"; //放入需要执行的sql语句
char* errmsg = NULL;//定义一个指针指向空,防止成为野指针
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
fprintf(stderr,"sqlite3_exec=%s ,__%d__",errmsg,__LINE__);
sqlite3_free(errmsg); //释放掉错误信息
return -1;
}
printf("数据表创建成功\n");
//打开需要导入数据库的文件
FILE* op = fopen("./dict.txt","r");
if(op == 0)
{
perror("fopen");
return -1;
}
printf("文件以只读模式打开成功\n");
int y = 1;
while(y)
{
printf("===================================\n");
printf("===============1.插入==============\n");
printf("===============2.删除==============\n");
printf("===============3.修改==============\n");
printf("===============4.查询==============\n");
printf("===============5.退出==============\n");
printf("===================================\n");
printf("请输入需要执行的操作>>>\n");
int x;
scanf("%d",&x);
switch(x)
{
case 1:
sq_insert(db,op); //插入
break;
case 2:
sq_delete(db); //删除
break;
case 3:
sq_update(db); //修改
case 4:
sq_select(db); //查询
break;
case 5:
y = 0; //退出
break;
}
}
//关闭数据库
if(sqlite3_close(db)!=SQLITE_OK)
{
fprintf(stderr,"sqlite_close=%d %s __%d__\n",\
sqlite3_errcode(db),sqlite3_errmsg(db),__LINE__);
}
printf("数据库关闭成功!\n");
if(fclose(op) == EOF)
{
perror("fclose");
return -1;
}
printf("文件关闭成功\n");
return 0;
}
/*
* function: 插入
* @param [ in]
* @param [out]
* @return
*/
int sq_insert(sqlite3* db,FILE* op)
{
//循环读取文件中的数据,一行一行读取
char arr[256] = "";
char word[32] = "";
char mean[200] = "";
int res ;
char sql[256];
while(1)
{
if(fgets(arr,sizeof(arr),op)==NULL)
break;
arr[strlen(arr)-1] = 0;
bzero(word,sizeof(word));
bzero(mean,sizeof(mean));
for(int i=0;i<strlen(arr)-2;i++)
{
if(arr[i] != ' ' && arr[i+1] == ' ' && arr[i+2] ==' ' )
{
strncpy(word,arr,i+1);
}
else if(arr[i]==' ' && arr[i+1] == ' ' && arr[i+2]!=' ')
{
strcpy(mean,arr+i+2);
break;
}
}
sprintf(sql,"INSERT INTO stu values (\"%s\",\"%s\")",word,mean);
char* errmsg = NULL;//定义一个指针指向空,防止成为野指针
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
fprintf(stderr,"sqlite3_exec=%s ,__%d__\n",errmsg,__LINE__);
sqlite3_free(errmsg); //释放掉错误信息
return -1;
}
}
printf("插入成功\n");
fclose(op);
return 0;
}
/*
* function: 删除
* @param [ in]
* @param [out]
* @return
*/
int sq_delete(sqlite3* db)
{
char word[128] ;
printf("请输入需要删除的单词或0全部删除>>>");
scanf("%s",word);
char sql[128]="";
if((*word) == 48 )
{
strcpy(sql,"DELETE FROM stu");
}
else
{
sprintf(sql,"DELETE FROM stu WHERE word='%s'",word) ;
}
//char* sql = "DELETE FROM stu WHERE id ";
char* errmsg = NULL;//定义一个指针指向空,防止成为野指针
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
fprintf(stderr,"sqlite3_exec=%s ,__%d__",errmsg,__LINE__);
sqlite3_free(errmsg); //释放掉错误信息
return -1;
}
printf("删除成功\n");
return 0;
}
/*
* function: 查询
* @param [ in]
* @param [out]
* @return
*/
int sq_select(sqlite3* db)
{
char sql[128] = "SELECT * FROM stu";
char** pres = NULL;
int row,colume;
char* errmsg;
if(sqlite3_get_table(db,sql,&pres,&row,&colume,&errmsg)!=SQLITE_OK)
{
fprintf(stderr,"sqlite3_exec=%s ,__%d__",errmsg,__LINE__);
sqlite3_free(errmsg); //释放掉错误信息
return -1;
}
printf("查询成功\n");
/* for(int i = 0;i<(row+1)*colume;i++)
{
printf("%s\t",pres[i]);
if((i+1)%colume == 0)
putchar(10);
}
*/
//打印表头
for(int i=0;i<row+1;i++)
{
for(int j=0;j<colume;j++)
{
printf("%s\t",pres[i*colume+j]);
}
putchar(10);
}
sqlite3_free_table(pres);
return 0;
}
/*
* function: 修改
* @param [ in]
* @param [out]
* @return
*/
int sq_update(sqlite3* db)
{
printf("输入需要修改的id行中修改的数据>>>id name score\n ");
char new_name[50];
float new_score;
int id;
char sql[128];
scanf("%d %s %f",&id,new_name,&new_score);
sprintf(sql,"update stu set name=\'%s\',score=%g where id=%d ",new_name,new_score,id );
printf("%s\n",sql);
char* errmsg = NULL;
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
fprintf(stderr,"sqlite3_exec=%s ,__%d__",errmsg,__LINE__);
sqlite3_free(errmsg); //释放掉错误信息
return -1;
}
printf("修改成功\n");
}