Android SQLite:如何使用不同的值更新所有记录的一列

时间:2014-09-21 13:35:20

标签: android sqlite sql-update

我在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?

中所述

2 个答案:

答案 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是您必须选择的开始日期,具体取决于您的最新状态