Android中的SQLite可以很好的支持事务操作,所谓的事务,就是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全不执行,不能执行某些操作,而不执行其他操作。打个比方,银行的转账操作,A转给B1000块钱,则A的账户中要扣除1000块,B的账户中要增加1000块,这两个行为要么都执行,要么都不执行,不能只执行其中一个操作。
使用Android的SQLite的事务也很简单,开始事务的时候需要调用beginTransaction();执行完一系列的数据库操作后,需要调用setTransactionSuccessful();最后需要调用endTransaction();这样就算成功的执行了依次数据库事务了,具体代码看下面:
假设有一张person表,里面有两个字段:id和name,对name执行更新操作,用数据库事务来完成:
public void btnTest(View v){ //测试数据库的事务 db = helper.getWritableDatabase(); db.beginTransaction(); try { db.execSQL("update person set name=? where id=?", new Object[]{"yubo_1", 1}); //这里模拟一个异常的产生,测试数据库的事务是否能成功执行, int i = 5 / 0; db.execSQL("update person set name=? where id=?", new Object[]{"yubo_haha", 1}); db.setTransactionSuccessful(); } catch (SQLException e) { e.printStackTrace(); }finally{ db.endTransaction(); db.close(); } Toast.makeText(this, "数据库执行了一次完整的事务!", Toast.LENGTH_SHORT).show(); }
一般把db.endTransaction()的执行放在finally代码块中。