我对android中的一个具体示例有疑问。让我们说我在一个线程/ asyncTask中运行一个Room数据库插件。
Thread
{
mDatabase.repoMethods().insert1
mDatabase.repoMethods().insert2
mDatabase.repoMethods().insert3
}
如果我在插入时停止线程,那么最终结果是什么? 为了举例说明,我假设我在插入1时停止线程。它先完成然后终止吗?或者它会执行其他插入然后呢?
答案 0 :(得分:1)
我会尝试以调查的方式回答这个问题,因为我不确定答案所以我做了一些研究。一些事实是从我对SQL的知识中得出的假设。所以任何人都可以随意纠正我。这个问题有两件事:
1)首先是中断的insert
查询。 Room
只是 SQLite 的抽象层, SQLite 跟在ACID属性之后。在您的情况下,我们关注的是 A tomicity:
原子性意味着必须完成事务的所有操作或在发生任何故障时回滚整个事务。
2)第二个是被中断的Thread
,但是如果Thread
被Thread.interrupt()
中断,则不会影响查询提到here,在某种程度上here。因此,第一个insert
将被执行,只有Thread
才会被中断。
从逻辑上思考,如果由于某种原因查询被中断somehow(我不确定它是如何转换为Java),那么SQLite的原子性将确保中止事务。