gpt4 book ai didi

android - 当 UPDATE 发生时,SQL 时间戳不会改变

转载 作者:行者123 更新时间:2023-11-29 02:02:21 25 4
gpt4 key购买 nike

我使用以下 SQL 命令在 Android 客户端上创建一个 products 表。

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 列的时间戳?

最佳答案

您可以通过设置触发器让数据库处理:

未经测试...

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;");

关于android - 当 UPDATE 发生时,SQL 时间戳不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12013563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com