如何更新" datetime默认current_timestamp" ContentValues?

时间:2015-10-20 08:07:26

标签: android sqlite timestamp android-sqlite android-sql

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

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 */
);

app用户可以将其中一个配置文件设置为" main" - 显示在导航栏和远程游戏合作伙伴中:

screenshot

在上面的SQL表中,我想指出一个配置文件是" 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"默认"那个专栏的规则?

更新

作为一种解决方法,我尝试过

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

CURRENT_TIMESTAMP是一个SQL关键字,因此您无法使用ContentValues。)