如何使用 ContentValues 更新 "datetime default current_timestamp"?

How to update "datetime default current_timestamp" with ContentValues?

在 Android 游戏中,用户数据(从不同的社交网络检索)存储在 SQLite table:

create table table_social (
        id text primary key,
        social integer not null, /* Facebook = 1, Google+ = 2, Twitter = 3, ... */
        first_name text not null,
        photo text null,
        city text null,
        stamp datetime default current_timestamp /* PROBLEM HERE */
);

应用程序用户可以将其中一个配置文件设置为 "main" - 显示在导航抽屉中并显示给远程游戏伙伴:

在上面的 SQL table 中,我想通过将其 "stamp" 列设置为最新的时间戳来表明配置文件是 "main"。

当我需要 "main" 配置文件时,我只需调用:

    Cursor cursor = getReadableDatabase().query(TABLE_SOCIAL,
        COLUMNS,
        null,
        null,
        null,
        null,
        "stamp desc",
        "1");

这工作正常,但我在通过更新时间戳更改 "main" 配置文件时遇到问题:

public void setMainUser(int social) {
    ContentValues values = new ContentValues();
    values.put(COLUMN_STAMP, (String) null);
    getWritableDatabase().update(TABLE_SOCIAL, 
        values, 
        "social=?", 
        new String[]{ String.valueOf(social) });
}

我也试过了

    values.put(COLUMN_STAMP, 0);

但是时间戳更新仍然没有发生。

有什么建议吗,如何触发该列的 SQLite "default" 规则?

更新:

作为解决方法我已经尝试过

values.put(COLUMN_STAMP, System.currentTimeMillis() / 1000);

但由于某种原因记录尚未更新(而且我无法在 Android studio 调试器中单步执行该部分 - 那里显示了错误的源代码...)

仅当您插入 行而该列没有值时才使用默认值。

更新行时,必须指定新值:

db.execSQL("UPDATE "+TABLE_SOCIAL+
           " SET "+COLUMN_STAMP+"=CURRENT_TIMESTAMP"+
           " WHERE social=?",
           new Object[]{ social });

(CURRENT_TIMESTAMP 是一个 SQL 关键字,所以你不能使用 ContentValues。)