sqlite3——数据库——day2

news2024/11/20 15:32:35

今天学习了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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud Gateway 新一代网关

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第六篇&#xff0c;即介绍 Gateway 新一代网关。 二、概述 2.1 Gateway 是什么 Gateway 是在 Spring 生…

前端请求到 SpringMVC 的处理流程

1. 发起请求 客户端通过 HTTP 协议向服务器发起请求。 2. 前端控制器&#xff08;DispatcherServlet&#xff09; 这个请求会先到前端控制器 DispatcherServlet&#xff0c;它是整个流程的入口点&#xff0c;负责接收请求并将其分发给相应的处理器。 3. 处理器映射&#xf…

安卓项目:app注册/登录界面设计

目录 第一步&#xff1a;设计视图xml 第二步&#xff1a;编写登录和注册逻辑代码 运行效果展示&#xff1a; 总结&#xff1a; 提前展示项目结构&#xff1a; 第一步&#xff1a;设计视图xml 在layout目录下面创建activity_login.xml和activity_main.xml文件 activity_lo…

rust学习(手动写一个线程池)

哈哈&#xff0c;主要是为了练习一下rust的语法&#xff0c;不喜勿喷。 一.Executor申明 struct AExecutor<T> {results:Arc<Mutex<HashMap<u32,T>>>, //1functions:Arc<Mutex<Vec<ATask<T>>>> //2 } 1.results&#xff1a…

docker-compose up -d使用遇到问题no configuration file provided: not found

docker-compose up -d使用遇到问题&#xff0c;因为你文件名称没指定&#xff0c; 又找不到默认的文件名称&#xff1b;如果该目录下有个文件叫docker-compose.yml时&#xff0c;那么可以直接使用docker-compose up -d;否则就要使用docker-compose -f mysql up -d

IP数据报格式

每一行都由32位比特&#xff0c;即4个字节组成&#xff0c;每个格子称为字段或者域。IP数据报由20字节的固定部分和最大40字节的可变部分组成。 总长度 总长度为16个比特&#xff0c;该字段的取值以字节为单位&#xff0c;用来表示IPv4数据报的长度(首部长度数据载荷长度)最大…

【阿里云系列】-基于云效构建部署Springboot项目到ACK

介绍 为了提高项目迭代的速度加速交付产品给客户&#xff0c;我们通常会选择CICD工具来减少人力投入产生的成本&#xff0c;开源的工具比如有成熟的Jenkins&#xff0c;但是本文讲的是阿里云提高的解决方案云效平台&#xff0c;通过配置流水线的形式实现项目的快速部署到服务器…

(第73天)DBUA 升级:单机 11GR2 升级到 19C

前言 Oracle 11GR2 版本是上一个长期稳定版本,但是官方已与 2020 年停止服务,官方建议升级到最新长期稳定版 19C。 参考官方文档:当前数据库版本的发行时间表 (Doc ID 1626244.1) Database Upgrade Assistant (DBUA) 交互式的引导我们完成升级数据库的步骤,它会自动执行为…

前端去除网页水印

按F12&#xff0c;打开开发者工具面板&#xff0c;然后直接在样式搜索backgroud 然后直接取消backgroud 的复选框即可。

每天五分钟计算机视觉:图像数据不足带来的问题和解决办法

本文重点 在当今的数字时代,图像数据的应用已经渗透到各个领域,包括但不限于计算机视觉、机器学习、自动驾驶、医疗诊断等。然而,当图像数据不足时,会引发一系列问题,对相关应用产生负面影响。 尤其是计算机视觉领域,图像数据尤为珍贵和稀缺,如果计算机视觉的任务中,如…

Linux本地搭建FastDFS系统

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

Git版本工具学习

目录 版本控制git配置工作区域文件状态git对象模型基础命令.gitignore忽略文件IDEA集成Git 版本控制 本地版本控制&#xff1a;在本地记录每一次版本更新。 集中版本控制&#xff1a;版本数据都保存在单一服务器&#xff0c;不联网就看不到版本信息。SVN 分布式版本控制&…

漏洞发现-漏扫项目篇武装BURP浏览器插件信息收集分析辅助

知识点 1、插件类-武装BurpSuite-漏洞检测&分析辅助 2、插件类-武装谷歌浏览器-信息收集&情报辅助 章节点&#xff1a; 漏洞发现-Web&框架组件&中间件&APP&小程序&系统 扫描项目-综合漏扫&特征漏扫&被动漏扫&联动漏扫 Poc开发-Ymal语…

吴恩达机器学习-可选的实验室-正则化成本和梯度(Regularized Cost and Gradient)

文章目录 目标添加正则化正则化代价函数正则化梯度下降重新运行过拟合示例恭喜 目标 在本实验中&#xff0c;你将: 用正则化项扩展前面的线性和逻辑代价函数。重新运行前面添加正则化项的过拟合示例。 import numpy as np %matplotlib widget import matplotlib.pyplot as p…

Xterminal:未来的终端体验

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

关于类和对象超级初级小白知识

下面的内容只是一小部分&#xff0c;在整个面向对象的知识中并不完整&#xff0c;用于记忆和梳理 目录 前言&#xff1a;类和对象是什么&#xff1f; 一、定义类 1.如何定义类 2.类的注意事项 二.类的实例化 1.创建对象的基础知识 2.如何创建对象 3.实例化举例 4.访问对象…

软考75-上午题-【面向对象技术3-设计模式】-设计模式的要素

一、题型概括 上午、下午题&#xff08;试题五、试题六&#xff0c;二选一&#xff09; 每一个设计模式都有一个对应的类图。 二、23种设计模式 创建型设计模式&#xff1a;5 结构型设计模式&#xff1a;7 行为设计模式&#xff1a;11 考试考1-2种。 三、设计模式的要素 3…

数据驱动下的私域运营战略布局

一、以用户为中心的组织重构或整合 发现&#xff0c;市场上大部分做的非常成功的私域项目&#xff0c;都是由CEO推动的、基于该战略的组织重构去驱动的。 我们也看到&#xff0c;在很多公司&#xff0c;私域运营是由品牌部门、CRM部门和Trade Marketing部门合作一起运营的。 …

FineReport报表如何在单元格中显示本地图片(图片地址已存储到MySQL数据库中)

帆软帮助文档对应查看链接&#xff1a;https://help.fanruan.com/finereport/doc-view-854.html?source4#需求&#xff1a;在设计FineReport报表时&#xff0c;想在单元格中显示图书信息对应的图片&#xff0c;图片路径已存储到MySQL数据库中 一、查询数据库 查询MySQL中图书…

一起玩儿3D打印机——02 3D打印机TinyBee主板、Marlin固件

摘要&#xff1a;本文介绍3D打印主板、固件 在前边已经介绍了3D打印机的基本组成&#xff0c;其中主板是3D打印机的硬件核心&#xff0c;而固件则是3D打印机的软件核心&#xff0c;在进行选择的两者一定要配合起来。因为3D打印机的核心处理器&#xff0c;不像PC机这样&#xff…