.使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。
代码如下 public void payment() {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
db.beginTransaction();//开始事务
try {
db.execSQL("update person set amount=amount-10 where personid=2");
db.execSQL("update person set amount=amount+10 where personid=5");
db.setTransactionSuccessful();// 设置事务的标志为true,调用此方法会在执行到endTransaction()方法是提交事务,若没有调用此方法会在执行到endTransaction()方法回滚事务。
} catch (SQLException e) {
} finally {
db.endTransaction();
}
// 结束事务,有两种情况:commit,rollback,
// 事务的提交或回滚是由事务的标志决定的,如果事务的标志为true就会提交,否则回滚,默认情况下事务的标志为false
}
应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。
而且不能保证所有数据都能同时插入
加事务处理,把5000条插入作为一个事务
我们使用SQLite的事务进行控制:
try{
//批量处理操作
for(Collection c:colls){
insert(db, c);
}
db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交
}catch(Exception e){
MyLog.printStackTraceString(e);
}finally{
db.endTransaction(); //处理完成
}
[android studio]Android SQLite 事务处理用法介绍
http://m.bbyears.com/flash/38062.html
推荐访问:android学习路线