单词及意思的文件拷贝到数据库中

用到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");
 
 }
                                                                                                                        
                                                                                                                        
                                                                                                                        
                                                                                                                        
                                                                                                                        
                                                                                                                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值