sqlite数据库之事务处理

SQLite 事务 SQLite 事务是保证数据库数据一致性和完整性的重要机制。通过对事务特性的理解,以及合理运用事务控制语句和性能优化方法,可以提高数据库的稳定性和效率。在实际开发过程中,我们需要根据具体场景选择合适的事务策略,确保数据库的可靠性和性能。 阅读详情

本篇文章旨在探讨sqlite数据库的事务处理。

关于sqlite,我封装了几个类方法方便调用sqlite,课参考我的开源项目,欢迎广大网友加入项目中一起优化这个项目!

好了接下来先贴上测试程序代码:

#include <cstring>
#include "./Wtime.h"
#include <sys/time.h>
#include <unistd.h>

#include "./main.hpp"

typedef struct {
	bool	output;
	bool	timing;
} dbCfg_t;

int test_exec(int argc, char* argv[])
{
	class sql::sqlite* handle;
 	struct timeval start,end;
	dbCfg_t cfg;
	std::string sqlCmd;
	if (argc>2) {
		handle = new sql::sqlite(argv[2]);
		if (handle == nullptr) {
			std::cout << "数据库[" << argv[2] << "]打开失败!" << std::endl;
			return -1;
		}
	} else {
		std::cout << "参数错误:输入正确的参数,如:./app 6 database.db" << std::endl;
		return -1;
	}
	//memset (&cfg, 0, sizeof (TdbCfg));
	cfg.timing = true;
	cfg.output = true;
	while (1) {
		std::cout << ">";
		//std::cin >> sqlCmd;
		std::getline (std::cin, sqlCmd);
		if (sqlCmd == "help") {
			std::cout << "[帮助]" << std::endl;
			std::cout << "output disable:关闭查询输出" << std::endl;
			std::cout << "output enable:打开查询输出" << std::endl;
			std::cout << "timing disable:关闭计时器" << std::endl;
			std::cout << "timing enable:打开计数器" << std::endl;
			std::cout << "exit:退出" << std::endl;
		} else if (sqlCmd == "output disable") {
			cfg.output = false;
		} else if (sqlCmd == "output enable") {
			cfg.output = true;
		} else if (sqlCmd == "timing disable") {
			cfg.timing = false;
		} else if (sqlCmd == "timing enable") {
			cfg.timing = true;
		} else if (sqlCmd == "exit") {
			delete handle;
			return 0;
		} else {
			gettimeofday (&start, NULL);
			cfg.output?handle->exec (sqlCmd.c_str(), test_callback):handle->exec (sqlCmd.c_str());
			//sleep (1);
			gettimeofday (&end, NULL);
			if (cfg.timing) {
				std::cout << "耗时:" << (end.tv_sec-start.tv_sec)*1000 + (end.tv_usec-start.tv_usec)/1000 << " ms,";
				std::cout << (end.tv_usec-start.tv_usec)%1000 << " us" << std::endl;
			}
		}
		sqlCmd.clear ();
	}
}

首先创建表和插入两条记录
在这里插入图片描述然后开启事务,插入一条记录后执行回滚操作
在这里插入图片描述如图中效果所示,回滚之后插入的数据没有了。现在来试试插入数据后提交。

在这里插入图片描述如图中所示,插入的数据保存在了数据库中。接下来测试一下未提交时的查询。
在这里插入图片描述在这里插入图片描述执行回滚后记录被撤回了。

现在来试试多进程间的事务处理关系。
在这里插入图片描述左边窗口执行事务,在开启事务后插入了一条数据,但是还没有提交或回滚,此时在右边窗口执行查询操作,结果查不到刚刚插入的数据,说明事务是线程互斥的。
在这里插入图片描述在这里插入图片描述在一个进程开启事务后,另一个进程插入记录会报错,显示数据库被锁住了。

Android快速入门-----数据存储(二)SQLite数据库存储(增删改查)事务处理 如果你觉得这些内容对你有帮助,可以扫码领取!!!! 阅读详情

相关推荐

Unity中SQLite数据库的高效集成与应用

htmltable {th, td {th {pre {简介:Unity SQLite DB插件让开发者能够在Unity游戏项目中集成轻量级关系型数据库SQLite,支持移动和桌面平台。本插件适用于存储游戏进度、用户设置等本地数据,提供数据存储与管理的解决方案,并通过多种关键知识点,如安装、操作、事务处理、异步操作、错误处理、性能优化和安全性,为Unity游戏开发带来强大的数据持久化能力。

weixin_30978239的博客 1548

SQLite事务处理

(或。

cozil的专栏 2950

sqlite事务处理以及增删改查

内附有sqlite3.6.2源码以及移植arm的基本步骤,sqlite.c为数据库的基本操作,具有增删改查的功能,并采用事务处理方式,事务处理能够极大的提高数据库的写入速度

SQLite数据库--事务创建,提交及异常回滚

下面代码中,`connection` 是一个 SQLite 数据库连接对象,`BeginTransaction()` 方法用于开启一个新的事务,并返回一个 `SQLiteTransaction` 对象,该对象可以用于提交或回滚事务。在事务执行完成后,需要调用 `Commit()` 方法提交事务,或者调用 `Rollback()` 方法回滚事务。总之,事务的目的是为了保证数据的一致性和完整性,而 COMMIT 命令则是将事务中的修改写入磁盘,以保证数据的持久性。// 出现异常,回滚事务。

Blue 3240

真双口RAM---Quartus与Vivado开发环境区别对比

2、写和写冲突:表示两个端口写使能同时有效且写地址相同,此时需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上面,任何的DP RAM 都不支持写和写冲突。以上述直方图统计使用为例,博主在仿真过程中发现,vivado真双口RAM--B端口读写延迟2个clk;1、读和写冲突:如果读和写同时有效,且读和写是同一个地址时,发生RAM读写冲突,此时会把最新的写数据直接赋给读数据,称为写穿通到读。

weixin_54470733的博客 3582

在QTableWidget中添加支持多选的QComboBox并显示

定义自定义表格项,主要用于显示复选框自定义的多选ComboBox类自定义委托类,用于表格中的多选ComboBox代码展示如下。

YUyang0304的博客 2782

SQLite 事务的认识

事务是指一组操作的集合,这些操作要么全部成功,要么全部失败。事务通常用于保证数据库操作的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),统称为 ACID 属性。原子性(Atomicity):事务中的所有操作都被视为一个单元,必须全部执行成功,否则将不对数据库进行任何更改。一致性(Consistency):事务的执行必须使数据库从一个一致性状态转变到另一个一致性状态。隔离性(Isolation)

My_wife_QBL的博客 1847

图形学基础知识:着色(三)Rendering Pipeline与Shader

管线(Pipeline) 什么是管线? 管线我们可以理解为流水线,流水线大家都懂,就是工厂里面生产东西的一整套流程。例如饮料厂要生产饮料,需要洗瓶子,倒饮料,加盖,包装等等,这一整套过程就是流水线。那么我们要把一个三维场景渲染成一幅二维的图像,同样需要一个先干嘛再干嘛然后干嘛最后干嘛的过程,这个过程或流水线,我们就称之为管线。 实时渲染管线(Real-time Rendering Pipeline) 通过前面几篇的学习,我们知道了要把一个三维场景渲染成一幅二维的图像大致分为以下几个步骤: M.

王王王渣渣的博客 2532

SQLite数据库操作+事务处理

SQLite数据库操作 SQLite数据库介绍 Android系统中集成的轻量级的数据库 特点: 轻量级 是以单个文件的形式进行存取 跨平台 支持多个操作系统 零配置 无需安装, 直接使用 嵌入式 内嵌到手机中 在程序的内部可以通过数据库的名称访问, 其他应用不能访问 .路径: data/data/应用程序包名/database/ 自定义名.db 存放的类型: NULL 空值 INTEGER 整...

caoqijia123的博客 3937

PySpark 本地开发环境搭建与实践

本文详细介绍了 PySpark 本地开发环境的搭建过程,包括 JDK、Hadoop、Anaconda、PySpark 的安装以及 Pycharm 工程的创建。同时,深入讲解了代码编写、本地开发案例(如 WordCount、处理特殊分隔符、读取 hdfs 数据、获取外部变量)、Spark 程序的监控和 local 模式下结果文件数量问题等内容。通过掌握这些知识和技能,读者可以在 Windows 本地环境中高效地进行 PySpark 开发,处理大规模数据,解决实际业务中的数据分析和处理问题。

天冬忘忧的博客 3012

共模电感在EMI滤波中的实战应用与设计技巧

本文深入探讨了共模电感在EMI滤波中的关键作用与设计技巧,涵盖电感值选择、饱和电流风险、磁芯材料性能及绕组工艺等实战经验。通过具体案例解析,展示了共模电感在开关电源、高速接口及汽车电子中的高效应用,帮助工程师解决电磁兼容问题并提升信号完整性。

weixin_27051161的博客 417

sqlite 事务处理 java_SQLite数据库创建、升级、事务处理、添加、更新、删除、查询...

SQLite数据库创建、升级、事务处理、添加、更新、删除、查询SQLite数据库创建、升级、事务处理、添加、更新、删除、查询只需要创建MyDatabaseHelper类来进行SQLite的所有操作(包括数据库创建、升级数据库、事务处理、添加、更新、删除、查询管理操作等),可以根据自己的需要在指定的位置添加新增的数据表或数据表字段即可。package netcx_love8023.csdn.http...

weixin_35426348的博客 395

Label Studio保姆级教程:从零搭建医疗影像标注平台(DICOM格式支持)

本文提供基于Label Studio从零搭建医疗影像标注平台的保姆级教程。针对DICOM格式支持,详细阐述了环境部署、DICOM深度集成与预处理、团队协作权限管理以及质量审核闭环等核心环节,旨在构建一个高效、可落地的医疗AI数据标注解决方案,助力模型落地。

nft7creator的博客 304

SQLite数据库简介

SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度

cheesesnl的专栏 571

MID360+fastlio功能笔记

前言。

qq_35598561的博客 5298

msf后渗透之获取登入password、远程控制、调用摄像头

在terminal输入load kili creds_all直接获取密码(不一定成功) 使用kiwi_cmd sekurlsa::logonpasswords获取密码

m0_61506558的博客 2964

java sqlite 事务处理_SQLite中利用事务处理优化DB操作

前几天Android应用开发过程中碰到一个问题,当将大量数据插入到数据库(sqlite3)时,在Log中发现独立线程进行处理的约上百次insert操作竟然耗费了10.6s 的时间。for(inti=0; i}考虑如何提升操作性能时,在SQLite的官方网站上的常用问答中找到了以下的信息:By default, each INSERT statement is its own transaction...

weixin_33158374的博客 316

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c# 把DataTable中数据批量导入新的sqlite的db文件中

需求 : 使用sqlite数据库, 将文件A.db 中某张数据表的数据,备份到文件B.db中。 解决方案: 使用dataTableUpdate。不推荐 可以使用事务进行批量处理。 目的: 避免手动拼接大量insert into sql语句,直接将dataTable 作为参数,实现批量插入。 主要代码逻辑,及调用方式如下。 //建表 string createSql = $"C...

菜鸟专栏 6567

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[C#]JCoder.Db4Net.Sqlite ,轻量的Sqlite数据处理类库,MIT协议

[C#]JCoder.Db4Net.Sqlite ,轻量的Sqlite数据处理类库,MIT协议

只会C#的程序猿 886

零代码SQLite数据库管理:DB Browser for SQLite完整指南

还在为复杂的SQL命令头疼吗?DB Browser for SQLite(简称DB4S)是你的救星!这款完全免费的开源工具让SQLite数据库管理变得像操作Excel一样简单。无论你是开发者、数据分析师还是普通用户,只需几分钟就能掌握数据库创建、编辑和查询的所有操作。告别命令行,拥抱可视化界面,让你的数据管理效率提升300%! ## 🎯 为什么你需要这个SQLite数据库管理工具 在数据驱动

gitblog_00507的博客 162

如何快速掌握go-sqlite3:打造高效SQLite数据库驱动程序【SQLite3】

go-sqlite3是一个功能强大的SQLite3数据库驱动,完美适配Go语言内置的database/sql接口,为开发者提供了便捷高效的SQLite3数据库访问方案。无论是开发小型应用还是构建复杂系统,它都能满足你对本地数据库操作的需求。 ## 为什么选择go-sqlite3? go-sqlite3作为Go生态中备受欢迎的SQLite驱动,具有以下核心优势: - **完全兼容databas

gitblog_00029的博客 1034

ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理

ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理 第一种情况 线程安全,解决同时取钱透支问题(上面解决) 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

Ios为我所用 2578

SQLite数据库创建、升级、事务处理、添加、更新、删除、查询

只需要创建MyDatabaseHelper类来进行SQLite的所有操作(包括数据库创建、升级数据库、事务处理、添加、更新、删除、查询管理操作等),可以根据自己的需要在指定的位置添加新增的数据表或数据表字段即可。 package netcx_love8023.csdn.httpblog.mytest.sqlite; import java.util.Date; /** * Created by xingkong on 2016/02/01. */ public class CollectGoods

hbspring007的专栏 392

轻型数据库SQLite结合PHP的开发

轻型数据库SQLite结合PHP的开发 SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世...

威尔软件 136

SQLite中利用事务处理优化DB操作

前几天Android应用开发过程中碰到一个问题,当将大量数据插入到数据库(sqlite3)时,在Log中发现独立线程进行处理的约上百次insert操作竟然耗费了10.6s 的时间。 for (int i = 0; i < headers.length; i++) { // ... dataBase.insert(tableName, fields);} 考虑如何提升操...

weixin_30240349的博客 79

SQLite

SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度...

weixin_33895475的博客 106
上一篇: sqlite数据库方法类使用说明-检查列字段是否存在、添加列、删除列
pioneer_t
博客等级 码龄8年 36粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值