事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等。在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率。假设需要在一张表内一次插入20个人的名字才算是操作成功,那么在不使用事务的情况下,如果插入过程中出现异常或者在插入过程中出现一些其他数据库操作的话,就很有可能影响了操作的完整性。所以事务可以很好地解决这样的情况,首先事务是可以把启动事务过程中的所有操作视为事务的过程。等到所有过程执行完毕后,我们可以根据操作是否成功来决定事务是否进行提交或者回滚。提交事务后会一次性把所有数据提交到数据库,如果回滚了事务就会放弃这次的操作,而对原来表的数据不进行更改。

SQLite中分别以BEGIN、COMMIT和ROLLBACK启动、提交和回滚事务。见如下示例:

@try{

char *errorMsg;

if (sqlite3_exec(_database, "BEGIN", NULL, NULL, &errorMsg)==SQLITE_OK) {

NSLog(@”启动事务成功”);

sqlite3_free(errorMsg);

sqlite3_stmt *statement;

if (sqlite3_prepare_v2(_database, [@"insert into persons(name) values(?);" UTF8String], -1, &statement, NULL)==SQLITE_OK) {

//绑定参数

const char *text=[@”张三” cStringUsingEncoding:NSUTF8StringEncoding];

sqlite3_bind_text(statement, index, text, strlen(text), SQLITE_STATIC);

if (sqlite3_step(statement)!=SQLITE_DONE) {

sqlite3_finalize(statement);

}

}

if (sqlite3_exec(_database, "COMMIT", NULL, NULL, &errorMsg)==SQLITE_OK) {

NSLog(@”提交事务成功”);

}

sqlite3_free(errorMsg);

}

else {

sqlite3_free(errorMsg);

}

}

@catch(NSException *e){

char *errorMsg;

if (sqlite3_exec(_database, "ROLLBACK", NULL, NULL, &errorMsg)==SQLITE_OK) {

NSLog(@”回滚事务成功”);

}

sqlite3_free(errorMsg);

}

@finally{

}

Page Cache之并发控制

pager层是SQLite实现最为核心的模块,它具有四大功能:I/O、页面缓存、并发控制和日志恢复。而这些功能不仅是上层Btree的基础,而且对系统的性能和健壮性有至关重要的影响。其中并发控制和日志恢复是事务处理实现的基础。SQLite并发控制的机制非常简单——即封锁机制;另外,它的查询优化机制也非常简单——基于索引。这一切使得整个SQLite的实现变得简单,同时变得很小,保证其运行速度非常快,所以特别适合嵌入式设备。SQLite是基于锁来实现并发控制的,其锁机制实现得非常简单而巧妙。

SQLite的并发控制机制是采用加锁的方式,实现简单,也非常巧妙.

sqlite 事务处理 java_SQLite事务处理相关推荐

  1. SQLite数据库操作+事务处理

    SQLite数据库操作 SQLite数据库介绍 Android系统中集成的轻量级的数据库 特点: 轻量级 是以单个文件的形式进行存取 跨平台 支持多个操作系统 零配置 无需安装, 直接使用 嵌入式 内 ...

  2. (6)理解事务处理、事务处理的隔离级别,和使用JDBC进行事务处理||抛弃框架,如何实现分层架构下JDBC事务的控制

    理解事务处理.事务处理的隔离级别,和使用JDBC进行事务处理   佟强 http://blog.csdn.net/microtong 2009年12月23日 事务是作为单个逻辑工作单元执行的一系列操作 ...

  3. 理解事务处理、事务处理的隔离级别,和使用JDBC进行事务处理

    理解事务处理.事务处理的隔离级别,和使用JDBC进行事务处理                佟强 http://blog.csdn.net/microtong 2009年12月23日 事务是作为单个逻 ...

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

    前几天Android应用开发过程中碰到一个问题,当将大量数据插入到数据库(sqlite3)时,在Log中发现独立线程进行处理的约上百次insert操作竟然耗费了10.6s 的时间. for (int ...

  5. SQLite剖析之事务处理技术

    前言 事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复等等.在数据库中使用事务可以保证数据的统一和完整性,同时也可以提高效率.假设需要在一张表内一次插入20个人的 ...

  6. mysql事务处理 begin_mysql 事务处理

    mysql 事务处理(表的引擎必须是 innodb / BDB) 主要是两种两法:推荐用第一种 1.用 begin,rollback,commit 来实现 begin 开始一个事务 rollback ...

  7. mysql 数据库事务处理_Mysql事务处理问题 - mysql数据库栏目 - 自学php

    今天和同学讨论起数据库事务处理的问题,感觉讨论中明白了一些,有些知识看过了,但是没有实际使用还是不理解. 事务处理就是将一系列操作当做一个原子操作,要么全部执行成功,如果执行失败则保留执行期的状态.通 ...

  8. mysql怎么实现事务序列化_MySQL 架构 - 事务处理

    事务处理 在事务处理之前,你不能知道数据库系统有如此多的高级功能.一个事物就是一组SQL查询.这一组被看做是原子的.也就是一个单独的工作单元.如果数据库引擎可以应用整个组的查询,就执行完毕.但是如果其 ...

  9. .NET三种事务处理详解

    体系结构:SQL事务处理.ADO.NET事务处理.COM+事务处理 数据库事务处理:T-SQL语句中完成, Begin Transaction Commit/Roll Back BEGIN TRANS ...

最新文章

  1. monty python喜剧-50大最搞笑喜剧片,无厘头成必杀技!
  2. 【转】svn的安装及与redmine的整合
  3. (JAVA学习笔记) 关于类的封装
  4. PyQt5利用QPainter绘制各种图形
  5. 笔记本触摸板滑动(双指滑动)太快怎么设置?
  6. 2019计算机视觉论文精选速递(2019/1/23-2018/1/28)
  7. 谁今天收到鸿蒙系统推送,鸿蒙系统正式推送,只有部分高端机才能收到
  8. VSTS2008和FTS2008的系统要求好高啊~
  9. C语言大神进来看看这个题目
  10. 如何查看服务器数据库型号,如何查看服务器里的数据库
  11. mysql+installer+community+5.7.9_win10系统,mysql-installer-community-5.7.19.0.msi安装
  12. App内存优化-实践
  13. 模仿笔迹最好的软件_模仿签名代写签字行业进入战国时代,乱战模式开启!
  14. 第010讲 通配符选择器 父子选择器
  15. chown –r mysql:mysql_Linux服务器部署系列之二—MySQL篇
  16. 教育统计与测量【1】
  17. Anaconda离线安装pkgs
  18. FPGA--(基于Quartus的FPAG程序下载与固化教程)VGA显示实验之上板测试
  19. 文件服务器fuse,FUSE 扩展
  20. 上饶师范学院数学与计算机科学学院,第4章-上饶师范学院数学与计算机科学学院.doc...

热门文章

  1. Java 实例 - 测试两个字符串区域是否相等
  2. 指针 数组指针 指针数组 函数指针等说明。
  3. noip2013——提高组——花匠(flower)
  4. 目录访问共享C#怎么访问共享目录
  5. Android 长度单位
  6. 大型网站采用的具有稳定性的系统构架
  7. 滤镜应用——拼图效果
  8. java打包拆包_关于java中JDK5的打包,拆包以及==和equals的问题
  9. movelast对数据记录数有要求吗_新颁布丨药品记录与数据管理要求(试行)解读...
  10. python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?