sqlite3_bind

2023-05-16

sqlite3_bind_text 中绑定的指针,在sqlite3_step 时必须存在,不能释放,否则会是乱码

sqlite3_bind_blob中绑定的指针,在sqlite3_step 时必须存在,不能释放,否则会是乱码

 

sqlite3_bind_int 、sqlite3_bind_double 绑定临时变量是可以的,因为传的是值

 


void test_parameter_binding() {
//1. 不带参数绑定的情况下插入多条数据。

char strSQL[128];
for (int i = 0; i < MAX_ROWS; ++i) {
    sprintf(strSQL,”insert into testtable values(%d)”,i);
    sqlite3_prepare_v2(…, strSQL);
    sqlite3_step(prepared_stmt);
    sqlite3_finalize(prepared_stmt);
}


//2. 参数绑定的情况下插入多条数据。

string strSQLWithParameter = “insert into testtable values(?)”;
    sqlite3_prepare_v2(…, strSQL);
    for (int i = 0; i < MAX_ROWS; ++i) {
        sqlite3_bind(…,i);
        sqlite3_step(prepared_stmt);
        sqlite3_reset(prepared_stmt);
    }
    sqlite3_finalize(prepared_stmt);
}


这里首先需要说明的是,SQL语句”insert into testtable values(?)”中的问号(?)表示参数变量的
占位符,该规则在很多关系型数据库中都是一致的,因此这对于数据库移植操作还是比较方便
的。
通过上面的示例代码可以显而易见的看出,参数绑定写法的执行效率要高于每次生成不同的
SQL语句的写法,即2)在效率上要明显优于1),下面是针对这两种写法的具体比较:
1. 单单从程序表面来看,前者在for循环中执行了更多的任务,比如字符串的填充、SQL语句
的prepare,以及prepared_statement对象的释放。
2. 在SQLite的官方文档中明确的指出,sqlite3_prepare_v2的执行效率往往要低于
sqlite3_step的效率。

3. 当插入的数据量较大时,后者带来的效率提升还是相当可观的。

 

 

sqlite3_get_table,效率低下,而且官方推荐使用sqlite3_prepare_v2替代

 

SQLite插入数据效率最快的方式就是:开启事务  +   insert语句  +  关闭事务(提交)

利用事务的互斥性,如果在批量的插入操作前显式地开启一次事务,在插入操作结束后,提交事务,那么所有的操作将只执行一次事务,大大地提高IO效率

开启事务和提交事务时缺省的,如果不显式写出来,将在每次insert语句前开启事务,insert语句后提交,如果执行insert语句1000万次,那么将自动开启并提交1000万次!!

事务的属性

事务(Transaction)具有以下四个标准属性,通常根据首字母缩写为 ACID:

  • 原子性(Atomicity):确保工作单位内的所有操作都成功完成,否则,事务会在出现故障时终止,之前的操作也会回滚到以前的状态。

  • 一致性(Consistency):确保数据库在成功提交的事务上正确地改变状态。

  • 隔离性(Isolation):使事务操作相互独立和透明。

  • 持久性(Durability):确保已提交事务的结果或效果在系统发生故障的情况下仍然存在。

事务控制

使用下面的命令来控制事务:

  • BEGIN TRANSACTION:开始事务处理。

  • COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。

  • ROLLBACK:回滚所做的更改。

事务控制命令只与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他们不能在创建表或删除表时使用,因为这些操作在数据库中是自动提交的。

 

sqlite3_exec可以执行任何sql语句,包括事务( "BEGIN TRANSACTION" )、回滚( "ROLLBACK")和提交("COMMIT")等等。 

 

SQLite3命令操作大全

https://www.cnblogs.com/youjianjiangnan/p/9603673.html

 BLOB数据的插入与查询

https://blog.csdn.net/u014337397/article/details/80603510

sqlite插入数据效率提升解决方案  对比

https://blog.csdn.net/aflyeaglenku/article/details/50946641?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

菜鸟教程 sqlite

https://www.runoob.com/sqlite/sqlite-transaction.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlite3_bind 的相关文章

  • jquery live 的替代方案可以工作

    我有这个简单的代码 http jsfiddle net borth BmEZv 如果您单击该链接一次 它就可以正常工作 如果你点击第二次 它就不起作用了 由于 html 是在 DOM 加载后才加载到 html 中的 所以我尝试过 on bi
  • std::bind 绑定函数

    我无法检测到为什么这不能编译 我有一些返回 a 的 lambda 函数std function基于一些论点 我已将问题范围缩小到此代码片段 它不使用 lambda 但完美地重现了我的错误 include
  • Android后台服务[重复]

    这个问题在这里已经有答案了 我正在阅读文档 花的时间越多 我就越困惑什么是完成我想做的事情的最简单方法 我想编写一个简单的服务 它从按钮 onClick 开始并绑定到活动 当活动关闭并稍后再次启动时 不仅仅是重新启动 我想检查服务是否已经在
  • 在 Javascript 中绑定已绑定函数的更多参数

    我尝试整理一下关于 javascript 的 bind 工作原理的想法 我看到如果我这样做 var f function a var g f bind obj g 1 然后 f 被调用obj as this and 1 as a 我认为 g
  • OSX Mavericks - 不再安装 BIND...如何使本地 DNS 服务器正常工作?

    我一直在 OSX 上使用 BIND 为我的本地开发机器提供本地 DNS 解析器 特别是为了方便虚拟机访问我的本地开发环境 愚蠢的是 我决定连夜升级到 OSX Mavericks 但似乎不再安装 BIND 即使添加了命令行开发人员工具 有人建
  • 如何在 Spring Boot 中将 yaml 列表绑定到 java 列表?

    我的 yml 文件中有一个列表 我需要将其绑定到我的 java springboot 应用程序中 我该如何处理 fruits Apple Bannana 理想情况下我想要类似的东西 Value filters siteID List sit
  • Python tkinter 列表框绑定 仅在第二次单击时有效

    如果有其他讨论已经解决了这个问题 我预先表示歉意 但我找不到任何东西 我是 Python 新手 除了 90 年代的一点点 Pascal 之外 我也是编程新手 我正在构建一个带有 tk 输入框的 GUI 供用户输入值 然后将其存储在 sqli
  • 使用 PDO 准备和绑定语句的条件查询

    我正在将所有查询从 mysql 转换为 PDO 在这个过程中我发现了一个条件查询 如下所示 if isset parameters searchTerm where And title LIKE parameters searchTerm
  • Chromium 嵌入式框架绑定按键

    我看到了这个在Chromium Embedded Framework的官方论坛上 但似乎没有给出解决方案 说实话 我对C 平台不太适应 您能帮我提供一个将 CEF 绑定到 web 应用程序的代码片段吗 我想使用默认控件来控制应用程序 ALT
  • 在 gnuplot 5 中捕获超文本值

    我确实喜欢 gnuplot 5 中新的超文本功能 但我仍然缺少一些东西 我不仅希望悬停在某个点附近来阅读一些隐藏的文本 而且我还希望能够捕获超文本 如果这个超文本是一个鼠标变量 就像 MOUSE X 和 MOUSE Y 一样 捕获它将是一个
  • 如何将 AngularJS 变量传递给 Javascript?

    我正在构建一个带有模态窗口的 AngularJS Web 应用程序 在模态窗口中 我可以显示 JQuery Flot 实时图表 类似于 http people iola dk olau flot examples realtime html
  • 如何在特定接口上打开套接字并接收 IPv4 和 IPv6 流量

    使用 IPv4 我可以将 绑定到特定地址来选择将用于接收数据包的接口 在某些情况下 也用于发送数据包 但这不是重点 在双栈 IPv6 IPV4 机器上 我遇到这个问题 我可以创建一个 6 套接字并使用它接收 4 个流量 但如果我想绑定到特定
  • Boost 绑定占位符参数等于可变参数模板参数的数量

    我想知道是否可以使用传递给可变参数模板的参数数量作为 boost bind 调用中的占位符 像这样的事情 template
  • 无法组合 X <字符> 和 X <双精度>

    我正在尝试使用以下命令将各种 csv 文件合并到一个数据框中 df lt list files path C Users pattern csv full names TRUE gt lapply read csv gt bind rows
  • Scala - 初始化 REPL 环境

    你好 我想嵌入 Scala REPL初始化环境进入我的应用程序 我看过IMain类 看来我可以通过它的实例来做到这一点 创建实例 然后将其存储到intp公共变量在process of ILoop 我如何绑定一些名称和 或之前添加一些导入pr
  • jQuery:将 ajaxForm 绑定到通过 .load() 加载的页面上的表单

    我正在使用 jQuery 的 ajaxForm 插件在我的 web 应用程序上提交表单 然而 在应用程序的一部分中 我通过 jQuery 的 load 加载一些带有表单的内容 问题在于我无法让 ajaxForm 绑定到通过 ajax 加载的
  • 如果Service在另一个进程中,如何绑定它?

    显现
  • 与 INADDR_ANY 绑定

    如果我将套接字绑定到 INADDR ANY 我知道它将接受服务器上配置的任何 IP 上的传入连接 假设我在进行 bind 调用时配置了 1 个 IP 然后配置了一个新的 IP bind 是否也会接受向新配置的 IP 发起的连接 还是仅适用于
  • jQuery 中使用 bind() 和each() 分配事件处理程序的区别?

    有人可以告诉我使用bind 分配事件处理程序有什么区别吗 function someElement bind mouseover function e this css change color bind mouseout function
  • 检测用户在 jQuery 中向下滚动或向上滚动[重复]

    这个问题在这里已经有答案了 可能的重复 jquery 中向上 向下滚动的区别 https stackoverflow com questions 4989632 differentiate between scroll up down in

随机推荐

  • PCL系列——拼接两个点云

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之移动立方体算法

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • 字节(Byte)与位(bit)、十进制与二进制的关系

    一 基本常识 数据存储是以 字节 xff08 Byte xff09 为单位 xff0c 数据传输大多是以 位 xff08 bit xff0c 又名 比特 xff09 为单位 xff0c 一个位就代表一个0或1 xff08 即二进制 xff0
  • ubuntu20.04配置TensorFlow-GPU版本+对应版本的cuda&cudnn

    ubuntu20 04配置TensorFlow GPU版本 43 对应版本的cuda amp cudnn 配置说明 操作系统是Ubuntu20 04 xff0c GPU是NVIDIA GeForce RTX 2080 Ti xff0c Py
  • 十四、Rust ORM 框架

    Rust 下的 orm xff0c 之前笔者介绍过 sqlx xff0c 但使用中发现 sqlx 在进行参数绑定时 xff0c 使用的是 宏 xff0c 在当前的 IDE 生态环境下 xff0c 有时不能很好的进行代码提示 xff0c 或代
  • mybatis源码之集成mybatis-plus源码

    本文将结合源码介绍mybatis plus的原理 xff0c 包括 xff1a BaseMapper APIMybatisSqlSessionFactoryBean类BaseMapper API Statement解析Wrapper查询构建
  • Jpa 插入更新如何过滤null值

    使用Jpa时 xff0c 默认的save方法会将entity中null的值也更新到数据库 xff0c 这对与存在默认值或者更新接口将直接导致错误的记录产生 xff0c 那么如何解决这个问题 xff1f Hibernate提供了两个注解 64
  • 一个奇怪的java.lang.IncompatibleClassChangeError异常

    解决方法就是替换jdk版本 xff0c 下面都是废话 最近项目进行了一次小更新 xff0c 添加了一个很小很小的功能 xff0c 结果运行一段时间后莫名出现java lang IncompatibleClassChangeError xff
  • nginx的proxy_pass最后反斜杠/的问题

    如果只是host xff0c 如http host 带 xff1a 用代理的内容替换掉匹配的路径 不带 xff1a 拼接上匹配的路径 2 xff1a 如果是子路径 xff0c 如http host func 带和不带 xff1a 用代理的内
  • gitlab修改克隆地址

    1 修改gitlab yml文件 xff0c 修改gitlab下的host和port vi opt gitlab embedded service gitlab rails config gitlab yml 修改完成后执行gitlab c
  • 结构体成员——数组或指针

    结构体成员是C类型的字符数组 表示字符串时 c语言中没有字符串类型 xff0c 只能使用字符数组表示字符串 当定义结构体时 xff0c 成员是字符数组时 xff0c 在外部给该成员赋值 xff0c 不能使用 结构体把变量名 成员名 61 3
  • C++遍历输出enum枚举类型

    enum DAY MON TUE WED THU FRI SAT SUN 问题 如果使用如下方式来遍历 xff0c 则编译器会报类型转换失败错误 xff0c 因为enum类型没有 43 43 运算符 xff0c 也不支持 43 运算 for
  • Kali Linux

    为什么我输入git clone 43 网址显示无法访问啊
  • Android自定义标题栏异常You cannot combine custom titles with other title features

    我们在使用自定义标题栏时 xff0c 一般的写法基本上是下面几步 requestWindowFeature Window FEATURE CUSTOM TITLE setContentView R layout activity test
  • Kotlin中使用Dagger2 可能导致错误"Dagger does not support injection into private fields"

    Kotlin 生成 java文件时属性默认为 private xff0c 给属性添加 64 JvmField 声明可以转成 public class User var name String 61 null val age Int 61 2
  • [linux]ubuntu22安装mysql5.7.40

    导语 xff1a ubuntu22 04 强制安装mysql5 7 40 安装完安装其他apt依赖的时候 可能会造成mysql出问题 最好还是离线环境用 apt update apt get install zip y cd var rm
  • winxp 远程rdp 连接 Ubuntu10.10-再次远程登陆失败 (二)

    在文章winxp 远程rdp 连接 Ubuntu10 10 一 操作完成 xff0c 并且进行第一成功登陆之后 xff0c 退出 xff08 注销 直接关闭mstsc退出按钮 xff09 远程连接之后 xff0c 重新登录出现 xff0c
  • PostGIS教程七:几何图形(Geometry)

    目录 一 介绍 二 元数据表 三 表示真实世界的对象 3 1 点 xff08 Points xff09 3 2 线串 xff08 Linestring xff09 3 3 多边形 xff08 Polygon xff09 3 4 集合 xff
  • FreeBSD下修改安装源的方法

    FreeBSD默认是从官方的源下载软件包的 xff0c 速度比较慢 xff0c 可以修改配置文件指定国内的镜像源来快速安装软件 说明 xff1a FreeBSD中安装软件一般有两种方式 xff1a xff08 一 xff09 使用pk ad
  • sqlite3_bind

    sqlite3 bind text 中绑定的指针 xff0c 在sqlite3 step 时必须存在 xff0c 不能释放 xff0c 否则会是乱码 sqlite3 bind blob中绑定的指针 xff0c 在sqlite3 step 时