Linux-轻量级数据库sqlite函数接口-016

1

1.1【sqlite3_open】

1.1.1函数原型

【int sqlite3_open(const char *filename,   /* Database filename (UTF-8) */sqlite3 **ppDb          /* OUT: SQLite db handle */);】

1.1.2函数功能

打开数据库文件(创建一个数据库连接)

1.1.3函数参数

【filename】:数据库文件路径
【ppDb】:操作数据库指针存放空间的首地址

1.1.4返回值

【成功】:返回【SQLITE_OK】
【失败】:返回错误码

1.2【sqlite3_close】

1.2.1函数原型

【int sqlite3_close(sqlite3 *);】

1.2.2函数功能

关闭数据库连接

1.2.3函数参数

1.2.4返回值

1.3【sqlite3_exec】

1.3.1函数原型

【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 */);】

1.3.2函数功能

执行一条SQL语句

1.3.3函数参数

【sqlite3*】:数据库句柄
【sql】:要执行的SQL语句字符串首地址
【callback】:只有在select时才会使用,其余调用时传递【NULL】
【void*】:给回调函数的传参
【errmsg】:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间)

1.3.4返回值

【成功】:返回【SQLITE_OK】
【失败】:返回错误码

源码示例(1):

typedef struct student 
{char name[32];char sex[8];int age;
}stu_t;int main(void)
{sqlite3 *pdb = NULL;int ret = 0;char cmdbuf[1024] = {0};char *perrmsg = NULL;stu_t s = {"张三", "男", 18};ret = sqlite3_open("student.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 student (id integer primary key asc, name varchar(255), sex varchar(32), age integer);");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;}sprintf(cmdbuf, "insert into student values (NULL, '%s', '%s', %d);", s.name, s.sex, s.age);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);return 0;
}

源码示例(2):

/*练习:将一张单词表中单词及其含义插入到数据库中*/
int LoadDictToDB(void)
{sqlite3 *pdb = NULL;char cmdbuf[4096] = {0};int ret = 0;char *perrmsg = NULL;FILE *fp = NULL;char tmpbuff[4096] = {0};char *pret = NULL;char *ptmpword = NULL;char *ptmpmean = NULL;long len = 0;long curlen = 0;ret = sqlite3_open("dict.db", &pdb);if (ret != SQLITE_OK){fprintf(stderr, "fail to sqlite3_open:%s\n", sqlite3_errmsg(pdb));return -1;}sprintf(cmdbuf, "create table if not exists dict (编号 integer primary key asc, 单词 varchar(64), 含义 varchar(4096));");ret = sqlite3_exec(pdb, cmdbuf, NULL, NULL, &perrmsg);if (ret != SQLITE_OK){fprintf(stderr, "fail to sqlite3_exec:%s\n", perrmsg);sqlite3_free(perrmsg);sqlite3_close(pdb);return -1;}fp = fopen("dict.txt", "r");if (NULL == fp){perror("fail to fopen");return -1;}fseek(fp, 0, SEEK_END);len = ftell(fp);rewind(fp);while (1){pret = fgets(tmpbuff, sizeof(tmpbuff), fp);if (NULL == pret){break;}curlen = ftell(fp);printf("已加载 %.2lf%%\r", (double)curlen / (double)len * 100);fflush(stdout);ptmpword = strtok(tmpbuff, " ");ptmpmean = strtok(NULL, "\r");sprintf(cmdbuf, "insert into dict values (NULL, \"%s\", \"%s\");", ptmpword, ptmpmean);ret = sqlite3_exec(pdb, cmdbuf, NULL, NULL, &perrmsg);if (ret != SQLITE_OK){fprintf(stderr, "fail to sqlite3_exec:%s\n", perrmsg);sqlite3_free(perrmsg);sqlite3_close(pdb);return -1;}}sqlite3_close(pdb);return 0;
}int main(void)
{if (access("dict.db", F_OK)){LoadDictToDB();}return 0;
}

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

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

相关文章

Element Plus与Ant Design Vue:选型对比

在Vue.js的开发过程中,选择合适的UI框架对于项目的成功至关重要。Element Plus和Ant Design Vue作为两个热门的Vue UI框架,各自拥有独特的特点和优势。本文将从多个维度对这两个框架进行对比,帮助开发者在选择时做出明智的决策。 一、框架版…

Python网络基础爬虫-python基本语法

文章目录 逻辑语句if,else,elifforwhile异常处理 函数与类defpassclass 逻辑语句 熟悉C/C语言的人们可能很希望Python提供switch语句,但Python中并没有这个关键词,也没有这个语句结构。但是可以通过if-elif-elif-…这样的结构代替,或者使用字…

目标检测——YOLOv2算法解读

论文:YOLO9000: Better, Faster, Stronger 作者:Joseph Redmon, Ali Farhadi 链接:https://arxiv.org/pdf/1612.08242v1.pdf 代码:http://pjreddie.com/yolo9000/ YOLO系列其他文章: YOLOv1通俗易懂版解读SSD算法解读…

STM32/GD32——CAN协议

说明:本文不断更新中,内容均为作者手打... 芯片选型 Ciga Device — GD32F470系列 CAN协议规则 CAN帧种类介绍 CAN总线以“帧”的方式进行通讯。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧。其中“数据帧”最为常…

记一次生产慢sql索引优化及思考

记一次生产慢sql索引优化及思考 问题重现 夜黑风高的某一晚,突然收到一条运营后台数据库慢sql的报警,耗时竟然达到了60s。看了一下,还好不是很频繁,内心会更加从容排查问题,应该是特定条件下没有走到索引导致&#x…

如何在数据库中存储小数:FLOAT、DECIMAL还是BIGINT?

前言 这里还是用前面的例子: 在线机票订票系统的数据表设计。此时已经完成了大部分字段的设计,可能如下: CREATE TABLE flights ( flight_id INT AUTO_INCREMENT PRIMARY KEY, flight_number VARCHAR(10), departure_airport_code VARCHAR(3), arrival_ai…

[论文精读]Dynamic Coarse-to-Fine Learning for Oriented Tiny Object Detection

论文网址:[2304.08876] 用于定向微小目标检测的动态粗到细学习 (arxiv.org) 论文代码:https://github.com/ChaselTsui/mmrotate-dcfl 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&…

支付模块-基于消息队列发送支付通知消息

消息队列发送支付通知消息 需求分析 订单服务作为通用服务,在订单支付成功后需要将支付结果异步通知给其他对接的微服务,微服务收到支付结果根据订单的类型去更新自己的业务数据 技术方案 使用消息队列进行异步通知需要保证消息的可靠性即生产端将消息…

深入了解 大语言模型(LLM)微调方法

引言 众所周知,大语言模型(LLM)正在飞速发展,各行业都有了自己的大模型。其中,大模型微调技术在此过程中起到了非常关键的作用,它提升了模型的生成效率和适应性,使其能够在多样化的应用场景中发挥更大的价值。 那么&…

华为新设备升级示例

​ 新设备升级示例 升级前准备工作 准备升级工具,即操作终端PC、网线和串口线。准备所需版本系统软件。 企业用户:登录​​http://support.huawei.com/e​​,在搜索栏中输入交换机型号,单击搜索栏中联想出的路径,进…

服务器命令

服务器命令 服务器命令top查看任务 服务器命令 top查看任务 、ps 命令 ps 命令是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和它所运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。总之大部分信息都是可以通过执行…

pytorch模型转onnx格式,编写符号函数实现torch算子接口和onnx算子的映射,新建简单算子--模型部署记录整理

对于深度学习模型来说,模型部署指让训练好的模型在特定环境中运行的过程。相比于软件部署,模型部署会面临更多的难题: 运行模型所需的环境难以配置。深度学习模型通常是由一些框架编写,比如 PyTorch、TensorFlow。由于框架规模、依…

JVM是如何解决跨代引用的?

JVM是如何解决跨代引用的? 跨代引用问题如何解决跨代引用记忆集(Remembered Set)卡表 写屏障 跨代引用问题 假如要现在进行一次只局限于新生代区域内的收集(Minor gc),但新生代的对象1在老年代中被引用,为了找出该区域…

掌握Go语言:深入encoding/gob包的高效数据序列化

掌握Go语言:深入encoding/gob包的高效数据序列化 引言理解Gob和它的使用场景Gob的概念和设计目标Gob的适用场景和优势 开始使用Gob基本的Gob编码和解码示例代码编码(序列化)解码(反序列化) Gob编码高级应用自定义类型的…

c语言常见上机题

快速排序 快排很容易进入无限递归&#xff0c;写的时候要注意边界问题 #include<iostream>using namespace std;int n;const int N 1e6 10;void qsort(int a[],int l,int r){if(l>r) return;int xa[l],il-1,jr1;while(i<j){do i;while(a[i]<x);do j--;while(…

MFC中手动create创建的窗口,如何销毁释放?

在MFC中&#xff0c;当你手动创建一个窗口&#xff08;例如使用Create函数而不是通过对话框模板创建&#xff09;&#xff0c;你需要确保在适当的时候正确地销毁和释放该窗口。这通常涉及删除窗口对象并调用其析构函数&#xff0c;这将负责清理与窗口相关联的资源。 以下是一些…

【Java语言】遍历List元素时删除集合中的元素

目录 前言 实现方式 1.普通实现 1.1 使用【for循环】 方式 1.2 使用【迭代器】方式 2.jdk1.8新增功能实现 2.1 使用【lambda表达式】方式 2.2 使用【stream流】方式 注意事项 1. 使用【for循环】 方式 2. 不能使用增强for遍历修改元素 总结 前言 分享几种从List中移…

基于 K8s 容器集群的容灾架构与方案

作者&#xff1a;庄宇 在设计系统架构时&#xff0c;我们必须假设任何组件和任何基础设施可能会在任何时间失效&#xff0c;例如&#xff1a;自然灾害&#xff0c;电力中断&#xff0c;网络中断&#xff0c;错误的系统变更等。为了应对挑战&#xff0c;我们必须设计合适的容灾…

在centos8中部署Tomcat和Jenkins

参考链接&#xff1a;tomcat安装和部署jenkins_jenkins和tomcat-CSDN博客 1、进入centos中 /usr/local 目录文件下 [rootlocalhost webapps]# cd /usr/local2、使用通过wget命令下下载tomcat或者直接在官网下载centos版本的包后移动到centos中的local路径下 3、下载tomcat按…

VUE3内置组件Transition的学习使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统RuoYi-Nbcio亿事达企业管理平台 gitee源代码地址 后端代码&#xff1a;…