Sqlite事务理解

原创 2016年06月02日 09:47:39

大家在使用sqlite的时候应该都知道每一条操作都是通过一个SQL语句来完成的,例如:

SQLiteDatabase db = ...;
db.execSQL("insert into person (name, age) values(?,?)", new Object[]{"张三", 4});
这句的意思大家都知道,没错就是往person表里面插入一条数据

不过大家平时在使用的使用一般都是这样用的:
db.beginTransaction();
try {
    db.execSQL("insert into person (name, age) values(?,?)", new Object[]{"张三", 4});
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
    db.close();
}

当然了,大家都知道这是开启事务如果事务部成功到结束事务的时候就回滚而非提交,很多人都能说出来但是却不知道意思。

经过多番百度,我终于找到了。
如果把上面的代码改成这样:
db.beginTransaction(); // 开启事务
try {
    db.execSQL("insert into person (name, age) values(?,?)", new Object[]{"张三", 4});

    db.execSQL("update person set name=? where personid=?", new Object[]{"李四", 1});

    db.setTransactionSuccessful(); // 标记事务完成
} finally {
    db.endTransaction(); // 结束事务
    db.close();
}

没错就是同时做了两条操作。这样就能体现事务的作用了:只要这两条操作有一条出了异常db.setTransactionSuccessful()就不会执行了。到finally结束事务时,发现事务没有标记完成。就不提交而是回滚。

回滚 就是还原(加入我第一条操作成功了,而第二条操作异常了,但是要求是两条都成功才能去改数据库,如果没有回滚,第一条已经改了数据库了,而第二条的操作没起作用,岂不是智能去进行数据库操作才能补救了吗?这就有点太过坑爹了。不过如果回滚了,那么第一条修改的数据库那条数据就会还原为修改之前的状态了)

可能这样解释不太明白,以下是我从百度上找来的一段解释也是帮助了我理解的:

一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。但如果一组中有任何的差错出现的话,我们就认为这事务不成功,需要回滚来撤消之前的操作。举例:你去银行转账,转账我们有两步吧,从你账户中取出钱再往他账户中加钱。那这两步银行是必须要确保正确无误的进行的。要被看做成一个事务。其中任何一步出错就算是转账失败,但可能你这时是已经从你账户中扣了钱了,又没往他账户里加
钱?怎么办算了?你不肯吧。所以银行会事务回滚,不保存你刚才的操作,即恢复复到你没转账之前的状态。

sqlite的事务和锁,很透彻的讲解 【转】

原文:sqlite的事务和锁 http://3y.uu456.com/bp-877d38906bec097sf46se240-1.html事务事务定义了一组SQL命令的边界,这组命令或者作为一个整体...
  • a912293097
  • a912293097
  • 2015年04月22日 10:22
  • 6564

SQLite:一次正常执行事务的过程

SQLite3中的事务SQLite3中可以使用BEGIN TRANSACTION和COMMIT TRANSACTION来开始和结束一个事务。如果你没有添加这些事务语句,SQLite3会为你的每条SQL...
  • gnhxsk2015
  • gnhxsk2015
  • 2017年09月06日 10:09
  • 201

sqlite3使用事务处理

sqlite3使用事务处理[zz] 标签: sqlite数据库insert测试磁盘sql 2010-09-24 12:10 10890人阅读 评论(1) 收藏 举报  分类: ...
  • haiross
  • haiross
  • 2015年12月22日 14:37
  • 2099

深入Android SQLite 事务处理详解

 应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘...
  • sunny_lv
  • sunny_lv
  • 2016年05月11日 09:35
  • 1992

提升sqlite性能以及事务的简单理解

sqlite事务处理的问题,在sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作 比如5000条记录也就是要5000次读写磁盘操作。 解决方法: 添加事务处...
  • keyboard_workers
  • keyboard_workers
  • 2012年06月08日 14:46
  • 3401

如何高效使用SQLite事务 .net (C#)

今天有个朋友测试 SQLite,然后得出的结论是: SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! 下面是他发给我的测试代码。我晕~~~~~~  using Syst...
  • smeller
  • smeller
  • 2012年03月26日 21:29
  • 10317

sqlite事务处理以及增删改查

  • 2017年07月25日 18:05
  • 2.21MB
  • 下载

事务和锁(SQLite)

转自:http://www.sqlite.com.cn/MySqlite/4/539.Html 2、    事务(Transaction)2.1、事务的周期(Transaction Lifecycle...
  • cctt_1
  • cctt_1
  • 2010年04月20日 10:41
  • 1735

Android在SQLite中使用事务

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果为成功则提交事务,否则回滚...
  • howlaa
  • howlaa
  • 2013年12月16日 10:56
  • 4669

SQLite剖析之事务处理技术

原文章地址:http://www.cnblogs.com/5211314jackrose/p/5818124.html 前言   事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及...
  • popvip44
  • popvip44
  • 2017年02月09日 16:51
  • 313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sqlite事务理解
举报原因:
原因补充:

(最多只允许输入30个字)