【网络编程】学习成果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
相关推荐
q***81647 分钟前
MySQL:数据查询-limit
数据库·mysql
p***92487 分钟前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
Yue丶越1 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
晚风吹人醒.2 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Y***98512 小时前
DVWA靶场通关——SQL Injection篇
数据库·sql
Yawesh_best2 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
蒋士峰DBA修行之路2 小时前
实验二十八 SQL PATCH调优
数据库·sql·gaussdb
roman_日积跬步-终至千里2 小时前
【强化学习基础(2)】被动强化学习:学习价值函数
学习
I***t7163 小时前
一条sql 在MySQL中是如何执行的
数据库·sql·mysql