我在Stack上发现类似这样的问题How to update an entire column in sqlite?但是他们没有解释我如何解决我的任务。
说,我有一个包含5列和5条记录的数据库。我需要的是使用相差1秒的unix时间值更新最后一列“date”。所以我需要把值1406820974139,1406820974140,1406820974141,1406820974142,1406820974143,1406820974144。
如何使用ContentValues做到这一点?因为我必须循环五次以创建新的ContentValues对象并一次更新一条记录(可能使用db.startTransaction()语法)。
我的问题是,有没有办法将所有值一次放入一个ContentValues对象并将其写入DB?或者更好的方法是使用原始SQL语法使用rawQuery,如How to update an entire column in sqlite?
中所述答案 0 :(得分:1)
理论上,可以将所有值放在一个SQL语句中:
UPDATE MyTable
SET date = CASE _id
WHEN 5 THEN 1406820974139
WHEN 17 THEN 1406820974140
WHEN 23 THEN 1406820974141
WHEN 69 THEN 1406820974142
WHEN 666 THEN 1406820974143
END;
但是,只为每行创建一个ContentValues
对象比构造此命令更容易。
答案 1 :(得分:0)
这样我们就知道哪一个日期应该去哪一行?什么是区分行的cririteria?
关系数据库表与excel表不同。没有隐含的行顺序(如果你总是看到相同顺序的行,你可以认为它是一种巧合,你不能像在Excel中那样依赖它),在db表中你需要有一个列(或其中一组)具有您在查询中用于标识每条记录的唯一值。
所以你需要在你的问题中更清楚。什么日期应该去哪个记录(由什么标识?)。没有隐式行号,如果需要,可以添加自动增量PK列。
那么你可以使用类似
UPDATE table SET column5= 1406820974140+PKcolumn
其中1406820974140是您必须选择的开始日期,具体取决于您的最新状态