终止 Room 数据库过程(Android)

3

我有一个关于Android中具体示例的问题。假设我正在线程/异步任务中运行Room数据库插入操作。

Thread
{
  mDatabase.repoMethods().insert1
  mDatabase.repoMethods().insert2
  mDatabase.repoMethods().insert3                    
}

如果在插入操作进行时停止线程,会得到什么结果?以这个例子为例,假设我在插入1执行时停止了线程。它会先完成插入1然后终止吗?还是会先执行其他的插入操作然后才终止?
1个回答

1
我将尝试以调查方式回答这个问题,因为我不确定答案,所以进行了一些研究。其中一些事实是基于我对SQL的知识做出的假设。所以任何人都可以随意纠正我。这个问题有两个方面:
1)首先是被中断的插入查询。Room只是SQLite上的一个抽象层,而SQLite遵循ACID属性。在您的情况下,我们关心的是原子性:
原子性意味着事务的所有操作必须完成或在任何失败的情况下回滚整个事务。
2)第二个方面是如何处理已经插入的数据。

2) 第二种情况是被中断的 Thread但是如果使用 Thread.interrupt() 中断一个 Thread,它不会影响查询,如 这里 和在某种程度上 这里 中所述。因此,第一个 insert 将被执行,然后才会中断 Thread

从逻辑上思考,如果由于某种原因查询被中断 一些方式(我不确定它如何转换为Java),那么SQLite的原子性将确保中止事务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接