【网络编程】学习成果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
相关推荐
数智化管理手记2 小时前
精益生产中的TPM管理是什么?一文破解设备零故障的密码
服务器·网络·数据库·低代码·制造·源代码管理·精益工程
Xudde.2 小时前
班级作业笔记报告0x04
笔记·学习·安全·web安全·php
翊谦3 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
晓晓hh3 小时前
JavaSE学习——迭代器
java·开发语言·学习
iFlyCai3 小时前
C语言中的指针
c语言·数据结构·算法
難釋懷3 小时前
OpenResty实现Redis查询
数据库·redis·openresty
421!4 小时前
GPIO工作原理以及核心
开发语言·单片机·嵌入式硬件·学习
别抢我的锅包肉4 小时前
【MySQL】第四节 - 多表查询、多表关系全解析
数据库·mysql·datagrip
Database_Cool_4 小时前
OpenClaw-Observability:基于 DuckDB 构建 OpenClaw 的全链路可观测体系
数据库·阿里云·ai
AI成长日志4 小时前
【笔面试算法学习专栏】双指针专题·简单难度两题精讲:167.两数之和II、283.移动零
学习·算法·面试