是通过使用getWriteableDatabase()检索数据库两次来保存以开始和提交事务。如果我想在一个事务中使用两个DAO,那么我有这种情况
这样的事情:
SqliteDatabase db = userDao.getWriteableDatabase();
try{
userDao.insert(firstname, lastname);
addressDao.insert(street);
// commit
db.setTransactionSuccessful();
db.endTransaction();
catch(Exception e){
// rollback
db.endTransaction();
}
其中:
class UserDao extends Dao {
public void insert(String firstname, String lastname){
SqliteDatabase db = getWriteableDatabase();
...
db.insertOrThrow(...);
}
}
class AdressDao extends Dao {
public void insert(String street){
SqliteDatabase db = getWriteableDatabase();
...
db.insertOrThrow(...);
}
}
getWriteableDatabase()
只是SQLiteOpenHelper.getWriteableDatabase()
在事务中以这种方式工作是否安全,或者getWriteableDatabase()是否返回另一个实例,因此事务不再在正确的范围内?
如果是这样,我可以将SqliteDatabase作为参数传递给DAO,例如
SqliteDatabase db = userDao.getWriteableDatabase();
try{
userDao.insert(db, firstname, lastname);
addressDao.insert(db, street);
// commit
db.setTransactionSuccessful();
db.endTransaction();
catch(Exception e){
// rollback
db.endTransaction();
}
答案 0 :(得分:0)
getWritableDatabase()在第一次调用时创建实例并缓存返回的值。所以你没有打开数据库两次,是的,这是安全的。