当前位置: 首页 > news >正文

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制作动画&#xff0c;本文则介绍了如何用CSS3画出个叮当猫&#xff0c;实现过程很有趣&#xff0c;感兴趣的朋友可以参考一下 首先&#xff0c;先把HTML结构搭建好&#xff1a; <div class"wrapper"> <!--叮当猫整体--> <di…...

Spring Boot 自动化单元测试类的编写过程

前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效&#xff0c;也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的&#xff0c;并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…...

复试专业前沿问题问答合集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 在许多数据库之中都会存在有一种数据类型 — 自动增长列&#xff0c;它能够创建流水号。如果想在 Oracle 中实现这样的自动增长列&#xff0c;可…...

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 模式下使用&#xff0c;因为 Debug 模式下&#xff0c;Flutter 采用的是 JIT&#xff08; 动态编译&#xff09;&#xff0c;代码是运行在 Dart VM 上&#xff0c;JIT 将 Dart 编译成可以运行在 Dart…...

现代游戏引擎架构

一、并行编程 1.1 为什么需要并行编程 游戏的渲染计算对算力要求很高&#xff0c;所以我们需要把操作系统的资源利用到极致。 但是摩尔定律已经不在适用了&#xff0c;硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。 1.2 并行编程基础 进程与线程&#…...

深度学习:复杂工业场景下的复杂缺陷检测方法

摘要&#xff1a;在复杂的工业场景中&#xff0c;缺陷检测一直是一个重要而具有挑战性的任务。近年来&#xff0c;深度学习技术的快速发展为复杂工业场景下的缺陷检测提供了新的解决方案。本文将介绍深度学习在复杂工业场景下的复杂缺陷检测中的应用&#xff0c;并探讨其技术进…...

CSDN个人简介优化 html font属性

CSDN个人简介优化 html font属性 个人简介个人简介优化字体21种样式选择字体大小设置4号字体 字体颜色设计渐变色&#xff08;可惜不能显示&#xff09; 字体加粗设置 <b>标签 个人简介 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 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 多了标签选择器 &#xff0c;RS 用deployment管理&#xff0c;用于容器编排无状态应用管理 deployment apiVersion: apps/v1 kind: Deployment metadata:name:…...

手机网页关键词视频爬虫采集软件可导出视频分享链接|视频无水印批量下载工具

全新音视频批量下载工具&#xff0c;为您解放视频管理烦恼&#xff01; 现如今&#xff0c;音上涌现出大量精彩的视频内容&#xff0c;但是要想高效地获取、管理和分享这些视频却是一件颇具挑战的事情。针对这一难题&#xff0c;我们自主研发了全新的音视频批量下载工具&#x…...

基于OpenCV的图像处理案例之图像矫正(Python)

Index 目录索引 写在前面解决思路参考 写在前面 本文通过一个案例介绍如何使用OpenCV将倾斜的扫描文档图像进行水平矫正。 解决思路 因为扫描图像中的大部分文字倾斜后&#xff0c;同一行文字也在同一条直线&#xff0c;所以可以通过拟合直线来计算文本倾斜角度&#xff0c;…...

创建linux虚拟机系统:(安装Ubuntu镜像文件,包含语言设置、中文输入法、时间设置)

我下载的是清华大写开源软件镜像站中的ubuntu-20.04.6-desktop-amd64.iso这个镜像文件&#xff0c; 这个文件我下载完成之后没有解压&#xff0c;直接在创建虚拟机的时候选择的压缩包。 地址为&#xff1a;Index of /ubuntu-releases/20.04/ | 清华大学开源软件镜像站 | Tsin…...

3.0 V-22V 宽输入电压,高效率异步升压芯片-ZCC5429

一、产品综述 ZCC5429 芯片是一款自动调频、最高 600KHz工作频率、高效率、宽输入电压范围的电流模式异 步升压&#xff08;BOOST&#xff09;芯片&#xff0c;且可调输入限流功能。用户可灵活地通过外部补偿建立动态环路&#xff0c;获得在所有条件下最优瞬态性能。 ZCC542…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...