据我了解,调用SqliteOpendHelper.getWritableDatabase()
总是返回SQLiteDatabase
的相同实例。那么与之关联的交易也不会受到影响吗?
假设一个单线程环境,我使用一个单例SQLiteOpenHelper实例。假设我的交易很长:
我打一次SQLiteDatabase.beginTransaction()
。
DAO1构造函数调用SqliteOpendHelper.getWritableDatabase()
。
DAO1方法对其执行CRUD操作。
DAO2构造函数调用SqliteOpendHelper.getWritableDatabase()
。
DAO2方法对其执行CRUD操作。
...不断
我打一次SQLiteDatabase.endTransaction()
。
是否所有DAO操作都在单个事务中执行?我不能从source中找出是否多次调用getWritableDatabase()
以某种方式影响事务。
最佳答案
是; getWritableDatabase()
始终返回相同的连接对象(除非之前已关闭),并且单个数据库连接始终使用单个事务,因此通过它进行的所有操作都在同一事务中。
请注意,SQLiteDatabase
支持事务调用的嵌套,因此对于较低级别的CRUD操作,无论从何处调用,都可以自己执行事务。