1.db.insert()方法,方法中已经写了try catch块,会捕捉SqliteException,因此如果直接用
db.beginTransaction();
try{
db.insert(...);
db.setTransactionSuccessful();
}finally{
db.endtransaction();
}
这样的代码去开启事务,会导致无论是否插入成功,代码一定会执行到db.setTransactionSuccessful();这一句。
正确的方法是:
由于insert()方法会返回long型数值,这个值是插入成功以后的id(虽然事务尚未提交,但是已经有id了);而如果插入失败,则会返回-1,因此判断返回值即可管理事务。
代码如下:
db.beginTransaction();
try{
if(db.insert(..)==-1){
throw new Exception();
}
db.setTransactionSuccessful();
}finally{
db.endtransaction();
}
db.setTransactionSuccessful();
db.beginTransaction();
try{
db.insert(...);
db.setTransactionSuccessful();
}finally{
db.endtransaction();
}