【网络编程】学习成果day7:用sqlite3和fgetc将字典写入数据库中的数据表。

1.将字典写入数据库中的数据表

代码:

c 复制代码
linux@linux:~/study/NETbc$ cat 03_dictsqlite3.c 
#include<myhead.h>
#define MAX 50

int do_insert(sqlite3* db);

int main(int argc, const char *argv[])
{
	//打开数据库
	sqlite3 *db=NULL;
	if(sqlite3_open("./dict.db",&db)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open:%s %d __%d__\n",\
				sqlite3_errmsg(db),sqlite3_errcode(db),__LINE__);
		return -1;
	}

	//创建表格
	char sql[128]="create table if not exists stu (word char,mean char);";
	char* errmsg=NULL;
	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec:%s __%d__\n",errmsg,__LINE__);
		return -1;
	}
	printf("create table stu success\n");

	//调用插入数据函数,创建数据表并将英文字典文本文件的单词和意思导入的数据表中
	do_insert(db);

	//关闭数据库
	if(sqlite3_close(db) != SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_close:%s %d __%d__\n",\
				sqlite3_errmsg(db),sqlite3_errcode(db),__LINE__);
		return -1;
	}
	printf("sqlite3_close success\n");

	return 0;
}

//插入数据
int do_insert(sqlite3* db)
{
	//打开文件操作
	FILE *fp;
	fp=fopen("dict.txt","r");
	char word[MAX]="";
	char mean[MAX]="";
	int flag=0; 		//标志位,用来区别记录单词(0)还是意思(1)
	int a; 				//接受fgetc的返回值,必须用int才能取到EFO,直接用char接收会产生段错误。
	char ch;   			//记录单个字符

	while((a=fgetc(fp))!=EOF)
	{
		ch=a;
		if(ch=='\n')
		{
			//写入数据库操作
			char sql[128]="";
			if(snprintf(sql,sizeof(sql),"insert into stu values (\"%s\",\"%s\");",\
								word,mean) < 0)
			{
				fprintf(stderr,"snprintf error:__%d__\n",__LINE__);
				return -1;
			}

			char * errmsg=NULL;
			if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
			{
				fprintf(stderr,"sqlite3_exec:%s __%d__\n",errmsg,__LINE__);
				return -1;
			}
			bzero(word,sizeof(word)); 	//给字符串清零
			bzero(mean,sizeof(mean));
			flag=0;
			continue;
		}else
		{
			if(ch==' ') 		//此文件中,当一行中有一个空格时,就开始收集mean字符串
			{
				flag=1;
			}
			else if(flag==0)
			{
				int len=strlen(word);
				word[len]=ch; 			//把字符加入字符串中
				word[len+1]='\0'; 		//字符串以'\0'结尾
			}else
			{
				int len=strlen(mean);
				mean[len]=ch; 			//把字符加入字符串中
				word[len+1]='\0'; 		//字符串以'\0'结尾
			}
		}
	}

	return 0;

}

运行结果:

c 复制代码
linux@linux:~/study/NETbc$ gcc 03_dictsqlite3.c -lsqlite3
linux@linux:~/study/NETbc$ ./a.out 
create table stu success
sqlite3_close success
linux@linux:~/study/NETbc$ sqlitebrowser dict.db
相关推荐
消失的旧时光-19431 天前
Android 系统层学习目录
android·学习
鸽芷咕1 天前
KingbaseES 统计信息深度调优:从自动收集到扩展统计,精准提升计划质量
数据库·mysql·性能优化·kingbasees·金仓数据库
-XWB-1 天前
【Oracle】Oracle诊断系列(3/6):性能瓶颈定位——从SQL到I/O的全面分析
数据库·sql·oracle
QiZhang | UESTC1 天前
学习日记day74
学习
2501_907136821 天前
批量重命名工具 Double12 Renamer -可正则、翻译
数据库·redis·缓存
日拱一卒——功不唐捐1 天前
交换排序:冒泡排序和快速排序(C语言)
c语言·数据结构·算法
xuefuhe1 天前
postgresql xmin xmax cmin cmax ctid
大数据·数据库
是桃萌萌鸭~1 天前
oracle 排查卡顿相关日志
数据库·oracle
wuxi_joe1 天前
一家研发制造企业的“软件进化史”
大数据·数据库·制造
自可乐1 天前
AutoGen(多智能体AI框架)全面学习教程
人工智能·python·学习·ai