本代码如果插入数据过多需要运行较长时间,请耐心等待!!!
终端输出的数字是行数!!!
代码示例
#include <stdio.h>
#include <sqlite3.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char const *argv[])
{
//打开文件
FILE *fop1=fopen("dict.txt","r");
if (fop1<0)
{
perror("fopen1 err.");
return -1;
}
//打开或创建数据库
sqlite3 *db=NULL;
if (sqlite3_open("./stu.db", &db)!=SQLITE_OK)
{
printf("sqlite3_open err:%s\n",sqlite3_errmsg(db));
return -1;
}
printf("数据库打开成功。\n");
//创建表
char *err=NULL;
if(sqlite3_exec(db,"create table stu(单词 char,解释 char);",NULL,NULL,&err)!=SQLITE_OK)
{
printf("create err:%s\n",err);
}
printf("数据库创建成功。\n");
//向表中插入数据
char ci[1024]={0},jie[1024]={0},sql[1024]={0};
char *p=NULL;
int n,nn=1;
while (fgets(ci,sizeof(ci),fop1)!=NULL)//每次读取一行
{
FILE *fop2=fopen("a.txt","w+");//创建并清空文件,暂存解释内容
if (fop2<0)
{
perror("fopen2 err.");
return -1;
}
n=0;
p=strtok(ci," ");//遇到空格就分割单词,并获取单词
//获取剩余单词
while (p)//跳过单词,把解释存入a.txt
{
if (n==1)
{
fputs(p,fop2);//写入单词
fputc(32,fop2);//写入空格分割单词
}
n=1;
p=strtok(NULL," ");//获取单词
}
rewind(fop2);//将文件指针定位到文件开头
fgets(jie,sizeof(jie),fop2);//从a.txt文件读入单词解释
sprintf(sql,"insert into stu values(\"%s\",\"%s\");",ci,jie);//拼接指令
if(sqlite3_exec(db,sql,NULL,NULL,&err)!=SQLITE_OK)//写入数据库内容
{
printf("insert err:%s\n",err);
return -1;
}
fclose(fop2);//关闭a.txt
printf("%d ",nn++);//计算行数
}
fclose(fop1);
return 0;
}