在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" - 显示在导航栏和远程游戏合作伙伴中:
在上面的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调试器中单步执行该部分 - 错误的源代码显示在那里......)
答案 0 :(得分:1)
仅当您插入新行而没有该列的值时才使用默认值。
更新行时,必须指定新值:
db.execSQL("UPDATE "+TABLE_SOCIAL+
" SET "+COLUMN_STAMP+"=CURRENT_TIMESTAMP"+
" WHERE social=?",
new Object[]{ social });
(CURRENT_TIMESTAMP
是一个SQL关键字,因此您无法使用ContentValues
。)