sqlite3——数据库——day2

今天学习了sqlite3数据库

sqlite3_open

sqlite3_open
	int sqlite3_open(
	    const char *filename,   /* Database filename (UTF-8) */
	    sqlite3 **ppDb          /* OUT: SQLite db handle */
	);
功能:
    打开数据库文件(创建一个数据库连接)
参数:
    filename:数据库文件路径 
    ppDb:操作数据库指针存放空间的首地址
返回值:
    成功返回SQLITE_OK
    失败返回错误码
eg:
	ret = sqlite3_open("worddict.db",&pdb);                                                                                                        
     if(SQLITE_OK != ret)
     {
         fprintf(stderr,"fail to sqlite3_open:%s\n",sqlite3_errmsg(pdb));
         return -1;
     }

sqlite3_close

sqlite3_close 
	int sqlite3_close(sqlite3*);
功能:
    关闭数据库连接

sqlite3_exec

int sqlite3_exec(
        sqlite3*,                                  /* An open database */
        const char *sql,                           /* SQL to be evaluated */
        int (*callback)(void*,int,char**,char**),  /* Callback function */
        void *,                                    /* 1st argument to callback */
        char **errmsg                              /* Error msg written here */
    );
功能:
    执行一条SQL语句
参数:
    sqlite3*: 数据库句柄
    sql: 要执行的SQL语句字符串首地址
    callback: 只有在select时才会使用,其余调用时传递NULL
    void*: 给回调函数的传参
    errmsg:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间)
返回值:
    成功返回SQLITE_OK
    失败返回错误码 

eg:实现将dict.txt文件中的所有单词和含义插入到数据库中,插入之后,输入单词,在数据库中将其意思输出到终端上。

#include"head.h"
#include <sqlite3.h>

typedef struct callbackarg
{
	char mean[4096];
	int flag;
}arg_t;

typedef struct worddict
{
	char word[256];
	char wordmean[1024];
}word_t;

int callback(void *arg,int col,char **pcontent,char **ptitle)
{
	arg_t *pmeanmsg = arg;
	pmeanmsg->flag = 1;	
	strcpy(pmeanmsg->mean,pcontent[0]);

	return 0;
}

int FindWordMean(char *pword,arg_t *pmeanmsg)
{
	sqlite3 *pdb = NULL;
	int ret = 0;
	char *perrmsg = NULL;
	char cmdbuf[4096] = {0};


	ret = sqlite3_open("worddict.db",&pdb);
	if(ret != SQLITE_OK)
	{
		fprintf(stderr, "sqlite3_open failed:%s\n", sqlite3_errmsg(pdb));
		return -1;
	}

	sprintf(cmdbuf, "select wordmean from worddict where wordname = \"%s\";",pword);
	ret = sqlite3_exec(pdb, cmdbuf, callback, pmeanmsg, &perrmsg);
	if (ret != SQLITE_OK)
	{
		fprintf(stderr, "sqlite3_exec failed:%s\n", perrmsg);
		sqlite3_free(perrmsg);
		sqlite3_close(pdb);
		return -1;
	}

	sqlite3_close(pdb);

	return 0;
}

int LoadDictToDB(void)
{
	sqlite3 *pdb = NULL;
	FILE *fp = NULL;
	char cmdbuf[4096] = {0};
	char tmpbuff[4096] = {0};
	int ret = 0;
	char *pret = NULL;
	char *perrmsg = NULL;
	char *ptmpword = NULL;
	char *ptmpmean = NULL;

	fp = fopen("dict.txt","r");
	if(NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}
	
	ret = sqlite3_open("worddict.db",&pdb);
	if(ret != SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open failed:%s\n",sqlite3_errmsg(pdb));
		return -1;
	}

	sprintf(cmdbuf,"create table if not exists worddict(id integer primary key asc,wordname varchar(255),wordmean varchar(255));");
	ret = sqlite3_exec(pdb,cmdbuf,NULL,NULL,&perrmsg);
	if(ret != SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec failed:%s\n",perrmsg);
		sqlite3_free(perrmsg);
		sqlite3_close(pdb);
		return -1;
	}

	while(1)
	{
		pret = fgets(tmpbuff,sizeof(tmpbuff),fp);
		if(NULL == pret)
		{
			break;
		}

		ptmpword = strtok(tmpbuff," ");
		ptmpmean = strtok(tmpbuff,"\r");

		sprintf(cmdbuf,"insert into worddict values(NULL,\"%s\",\"%s\");",ptmpword,ptmpmean);

		ret = sqlite3_exec(pdb,cmdbuf,NULL,NULL,&perrmsg);
		if(ret != SQLITE_OK)
		{
			fprintf(stderr,"sqlite3_exec failed:%s\n",perrmsg);
			sqlite3_free(perrmsg);
			sqlite3_close(pdb);
			return -1;
		}
	}


	sqlite3_close(pdb);
	fclose(fp);

	return 0;
}

int main(void)
{
	char word[256] = {0};

	arg_t meanmsg;

	if(access("worddict.db",F_OK))
	{
		LoadDictToDB();
	}
	
	printf("Please enter the word:");
	gets(word);

	FindWordMean(word,&meanmsg);

	if(meanmsg.flag)
	{
		printf("mean = %s\n",meanmsg.mean);
	}
	else
	{
		printf("not found!\n");
	}
	return 0;
}

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/455373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python使用lxml解析XML格式化数据

Python使用lxml解析XML格式化数据 1. 效果图2. 源代码参考 方法一&#xff1a;无脑读取文件&#xff0c;遇到有关键词的行再去解析获取值 方法二&#xff1a;利用lxml等库&#xff0c;解析格式化数据&#xff0c;批量获取标签及其值 这篇博客介绍第2种办法&#xff0c;以菜鸟教…

如何实现Git Push之后自动部署到服务器?

在平时个人开发的过程中是不是有这样的烦恼&#xff1a; 项目开发完成&#xff0c;Push之后 登录服务器&#xff0c;手动git pull&#xff0c;然后运行部署命令 这真的很烦诶&#xff01; 那么能不能Git push之后&#xff0c;远端服务器自动 Git pull 然后运行部署命令呢&a…

信息系统项目管理师002:信息系统(1信息化发展—1.1信息与信息化—1.1.2 信息系统)

文章目录 1.1.2 信息系统1.信息系统及其特性2.信息系统生命周期 记忆要点总结 1.1.2 信息系统 信息系统是由相互联系、相互依赖、相互作用的事物或过程组成的具有整体功能和综合行为的统一体。在经济与社会活动中&#xff0c;经常使用“系统”的概念&#xff0c;例如&#xff0…

python的函数与类的定义

目录 1.函数 1.函数的定义 2.输入参数与输出参数的类型 3.输入和输出多个参数 1.普通参数 2.含有任意数量的参数 3.关键字参数 4.普通参数与多个参数的结合 2.类 1.类的定义 2.类的实例化 3.继承 1.函数 1.函数的定义 def 函数名(输入参数): 文档字符串 函数体 …

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下&#xff0c;测试tcp保活&#xff0c;可以使用tcp自带keepalive功能。 2、几个重要参数&#xff1a; tcp_keepalive_time&#xff1a;对端在指定时间内没有数据传输&#xff0c;则向对端发送一个keepalive packet&#xff0c;单位&#xff1a;秒 tcp_keep…

HTML静态网页成品作业(HTML+CSS+JS)——体育足球介绍设计制作(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播&#xff0c;共有3个页面。 二、作品…

借助ChatGPT提高编程效率指南

PS: ChatGPT无限次数&#xff0c;无需魔法&#xff0c;登录即可使用,网页打开下面 一、借助ChatGPT提高编程效率指南 随着计算机技术的飞速发展&#xff0c;编程已经成为了现代社会中一个非常重要的技能。对于许多人来说&#xff0c;编程不仅是一项工作技能&#xff0c;而且是…

HCIP —— BGP 路径属性 (上)

目录 BGP 路径属性 1.优选Preferred-Value属性值最大的路由 2.优选Local-preference 属性数值大的路由 3.本地始发的BGP路由优先于其他对等体处学习到的路由。 4..优选AS_PATH属性值最短的路由 BGP 路径属性 BGP的路由选路是存在优选规则的&#xff0c;下图为华为官网提供…

【MySQL探索之旅】MySQL数据表的增删查改(初阶)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &…

Mac使用自动操作(Automator)发送文件到Android设备

需求场景 在Android开发调试的过程中&#xff0c;当需要把电脑上的文件传输到连接的Android设备时&#xff0c;通常的做法是通过adb push命令。那既然是通过命令操作&#xff0c;是否可以通过可视化的工具来操作呢&#xff1f;例如在Finder中&#xff0c;右击某一个文件或者目…

上海亚商投顾:沪指缩量调整 传媒、游戏股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡调整&#xff0c;上证50指数跌近1%&#xff0c;保险等权重板块走低&#xff0c;中国太保跌超…

【Java/Image】给指定路径下图片反色并加上当前日期形式的水印

【需求】 从通达信软件截屏下来的K线图&#xff0c;在打印前需要反色&#xff0c;打印后需要手动加上当前日期&#xff0c;这些都可以由程序代替手工完成。 以下是期待的效果。 【关键点】 给图片反色用的是梯度法&#xff0c;这个在网络上已有成型代码&#xff1b; 给图片…

职场中的“刺猬”与“狐狸”:如何找到你的竞争优势?

职场如战场&#xff0c;竞争激烈。每个人都试图找到自己的竞争优势&#xff0c;以在职场中脱颖而出。在寻找竞争优势的过程中&#xff0c;我们可以从"刺猬"和"狐狸"的角度来思考。那么&#xff0c;什么是"刺猬"和"狐狸"呢&#xff1f;…

《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘

《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘 总结dosbox-x.conf 不完美读取成功写入成功参考资料 总结 DOSBox 中访问 int 13h 始终没反应。网上查了下有人说是没支持&#xff0c;建议使用 DOSBox-X 经过无数遍尝试后&#xff1a; 环境状态Win11…

构建社区服务平台的智慧架构

社区服务平台作为连接社区居民与各类服务资源的桥梁&#xff0c;承载着提升居民生活品质、促进社区发展的重要使命。本文将深入探讨社区服务平台的架构设计理念、核心功能和发展前景&#xff0c;助力读者了解如何构建智慧化、便捷化的社区服务平台&#xff0c;为社区居民提供更…

【Java设计模式】二十、迭代器模式

文章目录 1、迭代器模式2、案例3、总结4、在源码中的实际应用 1、迭代器模式 提供了一种遍历的方式提供了一个对象来顺序访问聚合对象&#xff08;集合、容器&#xff09;中的一系列数据&#xff0c;而不会暴露聚合对象的内部表示 相关角色&#xff1a; 抽象聚合&#xff1a…

厚膜高压电阻器应用

EAK高压厚膜电阻器可用于广泛的应用。其中包括电源、配电系统、ESD 保护、电子显微镜、空气电离设备、雷达设备、X 射线发生器和 ATE。 示例电路包括高压泄放器、电压平衡、电压调节和分压器。在这篇文章中&#xff0c;我们将讨论选择电阻器时要考虑的关键问题。 电压泄放电路…

IDEA开启Run Dashboard

1、Run Dashboard是什么&#xff0c;为什么要使用 Run Dashboard 是 IntelliJ IDEA 中的一个工具窗口&#xff0c;用于管理和监视项目中正在运行的应用程序和配置。它提供了一种集中管理运行和调试过程的方式&#xff0c;可以让开发人员更方便地查看和控制正在运行的应用程序。…

CSAPP Malloc lab

CSAPP Malloc Lab 目标 实现一个简单的动态存储分配器。 评分标准 空间利用率应当减少internal 和 external fragmentation. memory utilization memory utilization payload / heap size fragmentation internal fragmentation external fragmentation throughput T 越接…

vue中ref 根据多选框所选数量,动态地变换box的高度

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…