如何根据SQLite(Android)中的(不同)主键更新一组行?

时间:2014-12-22 20:18:06

标签: android sql database sqlite android-sqlite

我有一个包含多个列的数据库表,包括id(主键)和last_sync(时间戳)。后台进程偶尔会将表的行与服务器同步。

如果流程成功,则返回...

  • 一个时间戳,表示同步的时间
  • id的列表。这意味着属于这些ID的行已成功同步

我现在要做的是更新last_sync列表中包含新时间戳的每一行的id列。


示例:

  • 返回时间戳:143394245
  • 返回列表:[11,25,64,126]

更新后,第11,25,64和126行的last_sync列应等于143394245。


我怎么能以最有效的方式做到这一点?该列表可能包含数千个ID。

最简单(但最昂贵)的方法是迭代列表并为每个id(update ... set last_sync = ... where id = ...)执行update-statement,如果列表有1000个条目,将导致1000次更新。这当然不是我想要做的,尤其不是在移动设备上。

另一个想法是做update ... set last_sync = ... where id IN (...)之类的事情。 IN旁边的集合将包含所有ID。但是如何使用StringBuilder动态创建该集合?我认为这非常hacky ..

我希望还有其他方法。感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用插入或替换:

Insert or Replace into <YourTable> 
last_sync, YT.<othercolumn>, YT.<othercolumn2>
from <YourTable> YT inner join <AnotherTable> ON
YT._id = AT._id 

https://www.sqlite.org/lang_insert.html

答案 1 :(得分:0)

感谢您的回复,但经过一些研究后,我决定使用批量更新。我发现只有两列的批量更新比预期的要快得多。 Nexus 5在一秒钟内完成超过2000次更新,符合我的要求。

相关问题