【发布时间】:2014-12-24 01:54:32
【问题描述】:
我有一个由几列组成的数据库表,包括id(主键)和last_sync(时间戳)。后台进程偶尔会与服务器同步表中的行。
如果进程成功,则返回...
- 一个时间戳,表示同步时间
-
ids 的列表。这意味着属于这些 id 的行已成功同步
我现在要做的是用新的时间戳更新列表中id 的每一行的last_sync 列。
例子:
- 返回时间戳:143394245
- 返回列表:[11,25,64,126]
更新后,第 11、25、64 和 126 行的 last_sync 列应等于 143394245。
我怎样才能以最有效的方式做到这一点?该列表可能包含数千个 ID。
最简单(但最昂贵)的方法是遍历列表并为每个 id (update ... set last_sync = ... where id = ...) 执行更新语句,如果列表有 1000 个条目,这将导致 1000 次更新。这当然不是我想做的,尤其是在移动设备上。
另一个想法是做类似update ... set last_sync = ... where id IN (...) 的事情。 IN 旁边的集合将包含所有 ID。但是如何使用 StringBuilder 动态创建该集合?我认为这很 hacky..
我希望还有其他方法。任何帮助表示赞赏,谢谢。
【问题讨论】:
-
使用字符串生成器。由于 SQL 始终是一个字符串,因此在某些时候您必须有一个字符串生成器。 SQL 的 ASCII 特性非常强。
标签: android sql database sqlite android-sqlite