如何使用 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
。)
在 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
。)