据我了解,调用SqliteOpendHelper.getWritableDatabase()总是返回SQLiteDatabase的相同实例。那么与之关联的交易也不会受到影响吗?

假设一个单线程环境,我使用一个单例SQLiteOpenHelper实例。假设我的交易很长:


我打一次SQLiteDatabase.beginTransaction()
DAO1构造函数调用SqliteOpendHelper.getWritableDatabase()
DAO1方法对其执行CRUD操作。
DAO2构造函数调用SqliteOpendHelper.getWritableDatabase()
DAO2方法对其执行CRUD操作。
...不断
我打一次SQLiteDatabase.endTransaction()


是否所有DAO操作都在单个事务中执行?我不能从source中找出是否多次调用getWritableDatabase()以某种方式影响事务。

最佳答案

是; getWritableDatabase()始终返回相同的连接对象(除非之前已关闭),并且单个数据库连接始终使用单个事务,因此通过它进行的所有操作都在同一事务中。

请注意,SQLiteDatabase支持事务调用的嵌套,因此对于较低级别的CRUD操作,无论从何处调用,都可以自己执行事务。

10-08 12:19