Android数据库事务操作
2015-01-07 20:53
363 查看
Android中的SQLite可以很好的支持事务操作,所谓的事务,就是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全不执行,不能执行某些操作,而不执行其他操作。打个比方,银行的转账操作,A转给B1000块钱,则A的账户中要扣除1000块,B的账户中要增加1000块,这两个行为要么都执行,要么都不执行,不能只执行其中一个操作。
使用Android的SQLite的事务也很简单,开始事务的时候需要调用beginTransaction();执行完一系列的数据库操作后,需要调用setTransactionSuccessful();最后需要调用endTransaction();这样就算成功的执行了依次数据库事务了,具体代码看下面:
假设有一张person表,里面有三个字段:id和name,balance,对balance执行更新操作,用数据库事务来完成:
另外一点是当需要插入大量的数据的时候:
这里需要注意的是这三条语句执行的顺序:
db.beginTransaction() db.setTransactionSuccessful() db.endTransaction()
一般把db.endTransaction()的执行放在finally代码块中。
使用Android的SQLite的事务也很简单,开始事务的时候需要调用beginTransaction();执行完一系列的数据库操作后,需要调用setTransactionSuccessful();最后需要调用endTransaction();这样就算成功的执行了依次数据库事务了,具体代码看下面:
假设有一张person表,里面有三个字段:id和name,balance,对balance执行更新操作,用数据库事务来完成:
public void testTransaction() { PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext()); SQLiteDatabase db = helper.getWritableDatabase(); if (db.isOpen()) { try { db.beginTransaction();// 开启事务 // 减去1000 db.execSQL("update person set balance = balance - 1000 where name = 'zhangsan'"); // int result =10/0; // 加上1000 db.execSQL("update person set balance = balance + 1000 where name = 'lisi'"); db.setTransactionSuccessful();// 标记事务成功 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { db.endTransaction(); } db.close(); } }
另外一点是当需要插入大量的数据的时候:
// 没加事务:26s // 加事务:1s public void testTransationInsert() { PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext()); SQLiteDatabase db = helper.getWritableDatabase(); if (db.isOpen()) { // 记住当前的效率 long start = System.currentTimeMillis(); try { db.beginTransaction(); // 开始添加数据 for (int i = 0; i < 10000; i++) { db.execSQL("insert into person(name,age,balance) values('wang" + i + "'," + (10 + i) + "," + (10000 + i) + ")"); } db.setTransactionSuccessful(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { db.endTransaction(); } // 记住结束时间 long end = System.currentTimeMillis(); long diff = end - start; Log.i(TAG, "耗时:" + (diff / 1000) + "s"); db.close(); } }
这里需要注意的是这三条语句执行的顺序:
db.beginTransaction() db.setTransactionSuccessful() db.endTransaction()
一般把db.endTransaction()的执行放在finally代码块中。
相关文章推荐
- android数据库事务操作
- android数据库事务操作
- Android中的数据库操作及内置SQLite使用和事务
- Android数据库事务操作
- android数据库 批量 事务 操作
- 使用事务操作android 数据库
- android 使用数据库事务提高操作效率
- Android 数据库事务操作
- android数据库 批量 事务 操作
- Android SQLite数据库(事务)的使用,多线程CRUD并发操作(可用于实际开发)
- Android SQLite数据库应用之Prepared Statement、事务操作
- android数据库 批量 事务 操作
- android 下数据库中的事务操作
- android数据库事务操作详解
- JDBC对数据库的事务操作
- spring 2.5整合jdbc进行数据库操作和注解事务控制
- 使用TransactionScope实现单数据库连接事务操作
- 使用TransactionScope实现单数据库连接事务操作
- spring 2.5整合jdbc进行数据库操作和XML事务控制
- c#批量插入数据到数据库【支持事务操作】