我使用以下SQL命令在Android客户端上创建产品表。
CREATE TABLE IF NOT EXISTS 'products' (
'_id' INTEGER PRIMARY KEY AUTOINCREMENT,
'name' TEXT,
'serverId' INTEGER,
'modifiedAt' TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE ( 'serverId' )
ON CONFLICT REPLACE );
当我从服务器加载数据并将插入本地数据库时,我使用内容提供程序中的以下命令来更新行或插入新值。
public int bulkInsert(Uri uri, ContentValues[] values) {
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
long rowId;
int rowsAdded = 0;
for (ContentValues contentValues : values) {
int affectedRows = db.update("products", contentValues,
"serverId = ?",
new String[] { contentValues.getAsString("serverId") });
if (affectedRows == 0) {
rowId = db.insert("products", null, contentValues);
if (rowId > 0) {
rowsAdded++;
}
}
}
return rowsAdded;
}
除了列 modifiedAt 之外,所有列都会在有新值时更新 注意:批量命令包含在事务中。我省略了代码以保持问题的简单。
问题:
每次更新发生时,如何更新 modifiedAt 列的时间戳?
答案 0 :(得分:1)
您可以让数据库通过设置触发器来处理它:
未经测试...
database.execSQL("CREATE TRIGGER updateLastModifiedDate " +
"AFTER INSERT ON products FOR EACH ROW BEGIN " +
"UPDATE products SET modifiedAt = date('now') " +
"WHERE _id = NEW.id " +
"END;");
database.execSQL("CREATE TRIGGER updateLastModifiedDate " +
"AFTER UPDATE ON products FOR EACH ROW BEGIN " +
"UPDATE products SET modifiedAt = date('now') " +
"WHERE _id = NEW.id " +
"END;");