据我所知,调用 SqliteOpendHelper.getWritableDatabase()
总是返回相同的 SQLiteDatabase
实例。那么与之关联的交易是否也不会受到影响?
假设一个单线程环境,我使用一个单例 SQLiteOpenHelper 实例。假设我有一个长事务:
- 我调用了一次
SQLiteDatabase.beginTransaction()
。 - DAO1 构造函数调用
SqliteOpendHelper.getWritableDatabase()
。 - DAO1 方法对其执行 CRUD 操作。
- DAO2 构造函数调用
SqliteOpendHelper.getWritableDatabase()
。 - DAO2 方法对其执行 CRUD 操作。
- ...继续
- 我调用了一次
SQLiteDatabase.endTransaction()
。
是否所有 DAO 操作都在该单个事务中执行?我无法从 source 中找出答案如果多次调用 getWritableDatabase()
以某种方式影响交易。
最佳答案
是的; getWritableDatabase()
总是返回相同的连接对象(除非它之前被关闭),并且单个数据库连接总是使用单个事务,因此通过它完成的所有操作都在同一个事务中。
请注意,SQLiteDatabase
支持事务调用的嵌套,因此较低级别的 CRUD 操作可以安全地执行自己的事务,无论它们是从何处调用的。
关于android - getWritableDatabase() 会影响事务吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26729595/