我目前成功使用了一个SQLite数据库,该数据库填充了来自网络的数据。我创建了一个值数组,并将这些值作为一行添加到数据库中。
目前要更新数据库,在启动活动时,我清除数据库并使用网络上的数据重新填充数据库。
有一种简单的方法可以执行以下操作之一吗?
答:如果数据发生了变化,我只更新表中的一行(我不知道除非有一致的主键,否则我怎么能这样做 - 会发生一个新的行会添加更改的数据,但是没有办法知道要删除哪些旧行
B:从网络获取所有数据行,然后清空并一次性填充数据库,而不是在获取每一行之后
我希望这是有道理的。我可以提供我的代码,但我不认为它对这个例子特别有用。
上下文:
在启动活动时,将扫描数据库以检索其他任务的值。但是,这需要的时间比需要的时间长,因为数据库已清空并重新填充。因此,任务只能在数据库完全重新填充时完成。
在理想的世界中,将扫描数据库并将值用于任务,并且只有在完整的更新数据集可用时才会替换该数据库。
答案 0 :(得分:2)
您对方法(b)的主要关注 - 清除所有数据并慢慢重新填充 - 似乎是需要拒绝填空和填写完成之间的任何查询。
您可以简单地将空/重新填充过程放入事务中。因此,数据库将始终具有可供阅读的数据。
或者,如果这不是一个可行的解决方案,那么如何将更新的结果附加到现有的结果,但是将“active”键设置为0插入。然后,一旦添加条目的过程完成,请使用事务查找并删除当前活动的条目,并(在同一事务中)将非活动条目更新为活动条目。