SQLiteC/C++接口详细介绍sqlite3_stmt类(十一)
返回:SQLite—系列文章目录
上一篇:SQLiteC/C++接口详细介绍sqlite3_stmt类(十)
下一篇: SQLiteC/C++接口详细介绍sqlite3_stmt类(十二)

43、sqlite3_reset
sqlite3_reset 函数用于重置已经编译并执行的 SQL 语句,将该语句恢复到初始状态,以便可以重新绑定参数并再次执行。
函数原型如下:
int sqlite3_reset(sqlite3_stmt *pStmt);
参数说明:
- pStmt:已经编译并执行的 SQLite 语句对象。
返回值:
- 返回 `SQLITE_OK` 表示执行成功,否则返回其他错误码。
举例用法:
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "INSERT INTO user (name, age) VALUES (?, ?)", -1, &stmt, 0);
sqlite3_bind_text(stmt, 1, "张三", -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 2, 18);
if (sqlite3_step(stmt) != SQLITE_DONE) {// 执行失败
} else {// 执行成功,重置语句以便重新绑定参数并执行sqlite3_reset(stmt);sqlite3_bind_text(stmt, 1, "李四", -1, SQLITE_STATIC);sqlite3_bind_int(stmt, 2, 20);if (sqlite3_step(stmt) != SQLITE_DONE) {// 执行失败}
}
在上面的示例中,我们首先使用 `sqlite3_prepare_v2` 函数编译了一条 SQL 语句,并绑定了两个参数。然后使用 `sqlite3_step` 函数执行该语句,并判断执行结果。如果执行成功,我们调用 `sqlite3_reset` 函数将该语句重置到初始状态,然后重新绑定参数执行。这样就可以重复执行同一段 SQL 语句,并改变绑定参数的值。
44、sqlite3_sql
sqlite3_sql 函数用于获取已编译的 SQL 语句的原始 SQL 字符串,用于调试和日志记录等场景。
函数原型如下:
const char *sqlite3_sql(sqlite3_stmt *pStmt);
参数说明:
- pStmt:已经编译的 SQLite 语句对象。
返回值:
- 返回已经编译的 SQL 语句的原始 SQL 字符串。
举例用法:
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "SELECT * FROM user WHERE age > ?", -1, &stmt, 0);
sqlite3_bind_int(stmt, 1, 18);
const char *sql = sqlite3_sql(stmt);
printf("SQL statement: %s\n", sql);
在上面的示例中,我们使用 `sqlite3_prepare_v2` 函数编译了一条 SQL 语句,并绑定了一个参数。然后使用 `sqlite3_sql` 函数获取该语句的原始 SQL 字符串,并打印出来。
注意:获取的字符串是编译后的 SQL 语句原始字符串,并未包含实际值或绑定参数的占位符。
45、sqlite3_step
sqlite3_step 函数用于逐行执行已编译的 SQL 语句,并返回一行数据或执行结果。
函数原型如下:
int sqlite3_step(sqlite3_stmt *pStmt);
参数说明:
- pStmt:已经编译的 SQLite 语句对象。
返回值:
- 返回 `SQLITE_ROW` 表示获取到了一行数据;返回 `SQLITE_DONE` 表示该语句执行结束;返回其他错误码表示执行失败。
举例用法:
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "SELECT * FROM user WHERE age > ?", -1, &stmt, 0);
sqlite3_bind_int(stmt, 1, 18);
while (sqlite3_step(stmt) == SQLITE_ROW) {int id = sqlite3_column_int(stmt, 0);const unsigned char *name = sqlite3_column_text(stmt, 1);int age = sqlite3_column_int(stmt, 2);printf("id=%d, name=%s, age=%d\n", id, name, age);
}
在上面的示例中,我们使用 `sqlite3_prepare_v2` 函数编译了一条 SQL 语句,并绑定了一个参数。然后使用 `sqlite3_step` 函数逐行获取该语句的结果,并打印出来。
注意:使用 `sqlite3_step` 函数时需要逐行获取结果并进行处理,可以使用 `sqlite3_column_xxx` 系列函数获取单元格中的数据。
46、sqlite3_stmt_busy
sqlite3_stmt_busy 函数用于判断指定的 SQLite 语句对象是否正在使用中。
函数原型如下:
int sqlite3_stmt_busy(sqlite3_stmt *pStmt);
参数说明:
- pStmt:已经编译的 SQLite 语句对象。
返回值:
- 如果指定的语句对象正在使用中,则返回非零值;否则返回零。
举例用法:
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "INSERT INTO user (name, age) VALUES (?, ?)", -1, &stmt, 0);
if (sqlite3_stmt_busy(stmt)) {printf("语句对象正在使用中\n");
} else {printf("语句对象未被使用\n");
}
sqlite3_finalize(stmt);
在上面的示例中,我们首先使用 `sqlite3_prepare_v2` 函数编译了一条 SQL 语句,并判断该语句对象是否正在使用中。然后使用 `sqlite3_finalize` 函数销毁语句对象。
这个函数可以用于判断语句对象是否可以被重用,或是在多线程环境下防止同时访问同一语句对象。
47、sqlite3_stmt_explain
sqlite3_stmt_explain 函数用于生成 SQLite3 的执行计划,并将其以文本格式存储到回调函数中。
函数原型如下:
int sqlite3_stmt_explain(sqlite3_stmt* pStmt,int (*xCallback)(void*,int,const char*,const char*,const char*), void *pArg,int bVerbose
);
参数说明:
- pStmt:已经编译的 SQLite 语句对象。
- xCallback:回调函数指针,用于接收执行计划输出。
- pArg:回调函数的第一个参数,在回调函数中使用。
- bVerbose:是否使用详细模式,1 表示详细模式,0 表示简洁模式。
回调函数的参数说明:
- 第一个参数:回调函数的第二个参数(即 `pArg` 参数)。
- 第二个参数:口令类型,可以是下列字符串中的某一个:
- `"Trace"`:表示该行是跟踪信息行。
- `"EXECUTE"`:表示该行是执行计划的一部分。
- `"SCAN TABLE"`:表示该行是从某个表中扫描行。
- `"SEARCH TABLE"`:表示该行是在某个表中搜索行。
- `"SEARCH SUBQUERY"`:表示该行是在子查询中搜索行。
- `"USE TEMP B-TREE"`:表示该行是使用零时 B-TREE 进行排序或分组。
- `"USE TEMP INDEX"`:表示该行是使用零时索引进行搜索。
- `"FIXED COLUMNS"`:表示该行是选择的列中的列,而不是搜索条件中的列。
- 第三个参数:SQL 语句执行计划的深度。
- 第四个参数:与执行计划相关的字符串信息,如关键字、表名、索引等。
- 第五个参数:与执行计划相关的数值信息,如扫描的行数等。
返回值:
- 返回 `SQLITE_OK` 表示执行成功,否则返回其他错误码。
举例用法:
static int explain_callback(void *pArg, int iDepth, const char *zType, const char *zName, const char *zExtra) {printf("%*s%s %s%s\n", iDepth*2, "", zType, zName, (zExtra ? zExtra : ""));return SQLITE_OK;
}
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "SELECT * FROM user WHERE age > ?", -1, &stmt, 0);
sqlite3_bind_int(stmt, 1, 18);
sqlite3_stmt_explain(stmt, explain_callback, NULL, 0);
sqlite3_finalize(stmt);
在上面的示例中,我们使用 `sqlite3_prepare_v2` 函数编译了一条 SQL 语句,并绑定了一个参数。然后使用 `sqlite3_stmt_explain` 函数生成执行计划,并将输出以文本格式打印出来。
回调函数 `explain_callback` 的作用是将执行计划文本格式打印在控制台上。可以在回调函数中将文本信息存储到一个文件或内存缓冲区中。
相关文章:
SQLiteC/C++接口详细介绍sqlite3_stmt类(十一)
返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(十) 下一篇: SQLiteC/C接口详细介绍sqlite3_stmt类(十二) 43、sqlite3_reset sqlite3_reset 函数用于重置已经编…...
【理解机器学习算法】之Clustering算法(Agglomerative Clustering)
聚合聚类(Agglomerative Clustering)是一种层次聚类算法,通过逐步合并或“聚集”它们来构建嵌套聚类。这种方法采用自底向上的方式构建聚类层次:它从将每个数据点作为单个聚类开始,然后迭代合并最接近的聚类对,直到所有数据点合并…...
千帆AppBuilder开发参考-应用API调用说明
介绍 百度智能云千帆AppBuilder平台提供了AppBuilder-SDK,开发者可使用SDK,快捷的开发功能,提升开发效率。 AppBuilder-SDK提供了完整的AI原生应用开发套件,包括丰富的开发组件和应用示例代码。开发组件包括大模型组件、AI能力组…...
python自定义日历库,与对应calendar库函数功能基本一致
目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库 自定义日历库函数,并使得其与python calend…...
css3鼠标悬停图片特效,图片悬停效果源码
特效介绍 css3鼠标悬停图片特效,图片悬停效果源码,可以在网页上面作为自己的动态加载名片,放到侧边栏或者网站合适的位置即可 动态效果 代码下载 css3鼠标悬停图片特效,图片悬停效果源码...
使用CSS3画出一个叮当猫HTML源码
我们经常使用PS或者Flash制作动画,本文则介绍了如何用CSS3画出个叮当猫,实现过程很有趣,感兴趣的朋友可以参考一下 首先,先把HTML结构搭建好: <div class"wrapper"> <!--叮当猫整体--> <di…...
Spring Boot 自动化单元测试类的编写过程
前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效,也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的,并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…...
复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型
复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型 深度学习中的的RNN、Hadoop、GPT大语言模型的原理关系问答: GPT(Generative Pre-trained Transformer)和RNN(Recurrent Neural Network)是两种在自然语言处理(NLP)领域广泛使用的深度学习模型。它们在处理…...
序列的使用
目录 序列的创建 序列的使 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 在许多数据库之中都会存在有一种数据类型 — 自动增长列,它能够创建流水号。如果想在 Oracle 中实现这样的自动增长列,可…...
golang kafka sarama 源码解析
消费者组重平衡 github.com/!shopify/saramav1.27.2/consumer_group.go func (c *consumerGroup) newSession(ctx context.Context, topics []string, handler ConsumerGroupHandler, retries int) (*consumerGroupSession, error) {// 获取broker组协调器coordinator, err :…...
Flutter知识点整理
JVM 1.Flutter Hot reload 实现原理 一、原理概述 Hot Reload 只能在 Debug 模式下使用,因为 Debug 模式下,Flutter 采用的是 JIT( 动态编译),代码是运行在 Dart VM 上,JIT 将 Dart 编译成可以运行在 Dart…...
现代游戏引擎架构
一、并行编程 1.1 为什么需要并行编程 游戏的渲染计算对算力要求很高,所以我们需要把操作系统的资源利用到极致。 但是摩尔定律已经不在适用了,硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。 1.2 并行编程基础 进程与线程&#…...
深度学习:复杂工业场景下的复杂缺陷检测方法
摘要:在复杂的工业场景中,缺陷检测一直是一个重要而具有挑战性的任务。近年来,深度学习技术的快速发展为复杂工业场景下的缺陷检测提供了新的解决方案。本文将介绍深度学习在复杂工业场景下的复杂缺陷检测中的应用,并探讨其技术进…...
CSDN个人简介优化 html font属性
CSDN个人简介优化 html font属性 个人简介个人简介优化字体21种样式选择字体大小设置4号字体 字体颜色设计渐变色(可惜不能显示) 字体加粗设置 <b>标签 个人简介 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光…...
从哈希桶角度看 unordered_map 与 unordered_set 的实现
文章目录 一、引言二、C unordered系列的无序关联式容器概览三、基于哈希桶的C unordered系列数据结构模拟实现1、unordered_map的模拟实现2、unordered_set的模拟实现3、哈希桶及其迭代器实现的代码 四、扩展与应用1. 自定义哈希函数2. 其他unordered数据结构unordered_multim…...
飞天使-k8s知识点27-kubernetes温故知新2-deployment
文章目录 RC和RS无状态应用管理 deployment有状态应用statefulSetdaemonSet RC和RS RC不会使用在生产环境 RS 比RC 多了标签选择器 ,RS 用deployment管理,用于容器编排无状态应用管理 deployment apiVersion: apps/v1 kind: Deployment metadata:name:…...
手机网页关键词视频爬虫采集软件可导出视频分享链接|视频无水印批量下载工具
全新音视频批量下载工具,为您解放视频管理烦恼! 现如今,音上涌现出大量精彩的视频内容,但是要想高效地获取、管理和分享这些视频却是一件颇具挑战的事情。针对这一难题,我们自主研发了全新的音视频批量下载工具&#x…...
基于OpenCV的图像处理案例之图像矫正(Python)
Index 目录索引 写在前面解决思路参考 写在前面 本文通过一个案例介绍如何使用OpenCV将倾斜的扫描文档图像进行水平矫正。 解决思路 因为扫描图像中的大部分文字倾斜后,同一行文字也在同一条直线,所以可以通过拟合直线来计算文本倾斜角度,…...
创建linux虚拟机系统:(安装Ubuntu镜像文件,包含语言设置、中文输入法、时间设置)
我下载的是清华大写开源软件镜像站中的ubuntu-20.04.6-desktop-amd64.iso这个镜像文件, 这个文件我下载完成之后没有解压,直接在创建虚拟机的时候选择的压缩包。 地址为:Index of /ubuntu-releases/20.04/ | 清华大学开源软件镜像站 | Tsin…...
3.0 V-22V 宽输入电压,高效率异步升压芯片-ZCC5429
一、产品综述 ZCC5429 芯片是一款自动调频、最高 600KHz工作频率、高效率、宽输入电压范围的电流模式异 步升压(BOOST)芯片,且可调输入限流功能。用户可灵活地通过外部补偿建立动态环路,获得在所有条件下最优瞬态性能。 ZCC542…...
2026年,跨端框架到底怎么选?
跨平台开发长期面临“一次编码、多端运行”的理想与现实落差。开发者常陷入取舍困境:既要兼顾性能与体验,又要控制包体与维护成本,更要在 Android、iOS、HarmonyOS 甚至 Web 和小程序间保持一致。实际项目中,常见坑包括启动延迟、…...
nomic-embed-text-v2-moe GPU算力利用:A10单卡并发16路请求的稳定性压测报告
nomic-embed-text-v2-moe GPU算力利用:A10单卡并发16路请求的稳定性压测报告 1. 引言:当嵌入模型遇上高并发挑战 最近在折腾一个多语言检索项目,需要找一个既强大又高效的文本嵌入模型。试了一圈,最终锁定了nomic-embed-text-v2…...
IM系统核心不是聊天?深入剖析SpringBoot+Netty项目中关系链与群组模块的设计陷阱
IM系统核心不是聊天?深入剖析SpringBootNetty项目中关系链与群组模块的设计陷阱 当大多数人谈论即时通讯系统时,首先想到的是消息收发功能。然而,真正让微信、QQ等产品形成护城河的,并非简单的消息传输能力,而是其背后…...
GenomicSEM实战指南:从GWAS摘要数据到复杂遗传模型的完整解析
GenomicSEM实战指南:从GWAS摘要数据到复杂遗传模型的完整解析 【免费下载链接】GenomicSEM R-package for structural equation modeling based on GWAS summary data 项目地址: https://gitcode.com/gh_mirrors/ge/GenomicSEM 在基因组学研究中,…...
Vxe-Table无限滚动踩坑实录:从‘假死’到流畅,我优化了这3个关键配置
Vxe-Table无限滚动性能优化实战:从卡顿到丝滑的进阶指南 上周接手了一个后台管理系统重构项目,当用户滚动浏览包含2万数据的表格时,页面直接卡成了PPT。这让我意识到,vxe-table的无限滚动功能虽然强大,但未经优化的实现…...
DVWA文件上传漏洞通关实录:从Low到High,手把手教你三种绕过姿势(附Burp Suite实战)
DVWA文件上传漏洞实战指南:从基础绕过到高级技巧 在Web安全领域,文件上传漏洞一直是最常见也最具破坏力的漏洞类型之一。DVWA(Damn Vulnerable Web Application)作为经典的漏洞练习平台,其文件上传模块设置了从低到高三…...
实战指南:Retrieval-based-Voice-Conversion-WebUI语音转换框架深度解析与性能优化
实战指南:Retrieval-based-Voice-Conversion-WebUI语音转换框架深度解析与性能优化 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Re…...
开源工具探索——OpenDroneMap:从无人机影像到三维地理信息的自动化构建
1. 为什么你需要了解OpenDroneMap? 如果你手头有一台消费级无人机,或者正在从事地理信息相关工作,那么OpenDroneMap(简称ODM)绝对值得你花时间研究。这个开源工具能把杂乱无章的航拍照片,自动转换成专业级的…...
如何在5分钟内掌握FlicFlac:Windows音频格式转换的轻量级解决方案
如何在5分钟内掌握FlicFlac:Windows音频格式转换的轻量级解决方案 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac FlicFlac是一款专为Window…...
Wireshark抓包实战:为什么你的网站访问慢了?可能是IPv6 DNS解析在‘捣鬼’
Wireshark抓包实战:IPv6 DNS解析对网站访问速度的影响诊断手册 当用户抱怨"网站打开慢"时,作为技术人员的你首先想到的可能是服务器负载、CDN节点或本地带宽问题。但在双栈网络环境中,一个常被忽视的罪魁祸首正潜伏在DNS解析层——…...
